我创建了一个自定义的jTabbedPane
类,该类继承了BasicTabbedPaneUI
,并成功地创建了我想要的jTabbedPane
。但现在的问题是,如何为自定义的jTabbedPane中的每个选项卡设置手形光标?
我尝试使用以下代码设置光标:
tabbedPane.setUI(new CustomMainMenuTabs());
tabbedPane.setCursor(new Cursor((Cursor.HAND_CURSOR)));
这会设置整个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);
}
}
如何在鼠标悬停在任何选项卡上时将光标设置为HAND_CURSOR光标,而不是JPanel或任何其他组件。如果可以不使用鼠标监听器实现,那就太好了。
MouseMotionListener
并使用tabForCoordinate(...)
方法时,代码对我来说运行良好。或者你因为我的原始答案建议使用MouseListener
而遇到问题了吗?我希望你知道区别,但由于你没有发布你的SSCCE
,我不确定那是否是你的问题。 - camickrSSCCE
。向我们证明你已经努力听取了建议。基本代码很简单。如果tabForCoordinate()
方法返回-1,则将光标设置为null,否则将光标设置为手形光标。我会离开几天,所以在回来之前我无法发表评论。我还有一个关于你其他问题的想法,但由于你还没有发布可编译的SSCCE
,所以我不打算花时间让你的代码编译。 - camickr