Abd*_*rai 5 java swing focus cursor jtabbedpane
我创建了一个自定义jTabbedPane类,它扩展BasicTabbedPaneUI并成功创建了我想要的jTabbedPane但现在的问题是如何在自定义jTabbedPane中为每个选项卡设置手形光标?
我试着用这个设置光标
tabbedPane.setUI(new CustomMainMenuTabs());
tabbedPane.setCursor(new Cursor((Cursor.HAND_CURSOR)));
Run Code Online (Sandbox Code Playgroud)
这为整个jTabbedPane设置了光标,但我想在鼠标悬停在其中的任何选项卡上时设置光标.
如何在jTabbedPane中为标签设置手形光标?
我的代码是
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
public class HAAMS
{
//My Custom class for jTabbedPane
public static class CustomMainMenuTabs extends BasicTabbedPaneUI
{
protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected)
{
Graphics2D g2 = (Graphics2D) g;
Color color;
if (isSelected) { color = new Color(74, 175, 211); }
else if (getRolloverTab() == tabIndex) { color = new Color(45, 145, 180); }
else {color = new Color(68, 67, 67);}
g2.setPaint(color);
g2.fill(new RoundRectangle2D.Double(x, y, w, h, 30, 30));
g2.fill(new Rectangle2D.Double(x + 100,y,w,h));
}
}
public static void main(String[] args)
{
JFrame MainScreen = new JFrame("Custom JTabbedPane");
MainScreen.setExtendedState(MainScreen.getExtendedState() | JFrame.MAXIMIZED_BOTH);
//Setting UI for my jTabbedPane implementing my custom class CustomMainMenuTabs
JTabbedPane jtpane = new JTabbedPane(2);
jtpane.setUI(new CustomMainMenuTabs());
jtpane.add("1st Tabe", new JPanel());
jtpane.add("2nd Tabe", new JPanel());
jtpane.add("3rd Tabe", new JPanel());
MainScreen.getContentPane().add(jtpane);
MainScreen.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
当鼠标悬停在任何选项卡上而不是jpanel或任何其他组件时,如何将光标设置为HAND_CURSOR光标.如果没有鼠标监听器就可以了.
我想在鼠标移动到其中的任何选项卡上时设置光标。
我猜您需要将 MouseMotionListener 添加到选项卡式窗格。然后当mouseMoved(...)生成事件时,您检查鼠标是否位于选项卡上。
您应该能够使用tabForCoordinate(...)的 方法BasicTabbePaneUI来确定鼠标是否位于选项卡上。