在java中为jTabbedPane的选项卡设置游标

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光标.如果没有鼠标监听器就可以了.

cam*_*ckr 2

我想在鼠标移动到其中的任何选项卡上时设置光标。

我猜您需要将 MouseMotionListener 添加到选项卡式窗格。然后当mouseMoved(...)生成事件时,您检查鼠标是否位于选项卡上。

您应该能够使用tabForCoordinate(...)的 方法BasicTabbePaneUI来确定鼠标是否位于选项卡上。

  • `tabForCoordinate(...) 给出鼠标的坐标` 不,它没有。它给出了选项卡。你读过 API 了吗?如果您需要更多帮助,请发布您的 [SSCCE](http://sscce.org/),其中显示您如何尝试使用此方法。 (3认同)
  • @AbdulJabbarWebBestow,我已经离开 5 天了,您仍然没有使用我提出的建议发布正确的 SSCCE。我猜你对答案不感兴趣。当您甚至不愿意为我们发布代码时,为什么您期望我们所有人为您发布代码。你是寻求帮助的人,所以你应该付出努力。你得到了你所给予的,但你没有给我们任何东西。 (3认同)