【发布时间】:2014-09-22 15:04:27
【问题描述】:
我创建了一个自定义 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 或任何其他组件。如果没有鼠标监听器,那就太好了。
【问题讨论】:
-
您需要在您的 UI 中提供鼠标支持。只需添加一个鼠标侦听器,当鼠标进入选项卡标题组件时将光标设置为手。
-
@SergiyMedvynskyy 检测 jtabbedpane 的选项卡标题组件的方法是什么,以便我可以添加鼠标侦听器。
-
你为什么要发布赏金,你已经得到了答案?当您添加
MouseMotionListener并使用tabForCoordinate(...)方法时,该代码对我来说很好。还是因为我原来的答案建议使用 MouseListener 而遇到问题?我希望您知道其中的区别,但由于您没有发布您的SSCCE,我不确定这是否是您的问题。 -
@camickr 我发布了所有我得到的。我也尝试了你的建议,但这对我不起作用。这就是为什么我问你是否可以给我一个代码示例以便我理解它。而且我也在搜索是否可以不使用鼠标监听器
-
@AbdulJabbarWebBestow,
I tried your suggestion as well but that didn't work for me.并且您已被要求两次发布SSCCE以显示您尝试过的内容。向我们证明您已努力听取建议。基本代码很简单。如果tabForCoordinate()方法返回-1,则将光标设置为空,否则将光标设置为手形光标。我离开了几天,所以在我回来之前我不能发表评论。对于您的其他问题,我也有一个想法,但是由于您尚未发布可编译的 SSCCE,因此我不打算花时间编译您的代码。
标签: java swing focus jtabbedpane mouse-cursor