java 文本框鼠标颜色_如何更改鼠标上的菜单标题颜色(在Java Swing中)?

我希望菜单栏上的菜单可以在鼠标上更改其背景颜色..就像在大多数应用程序中一样.

我想要这个效果 – > Sample Picture

到目前为止我尝试了什么…

public class Menu extends JMenuBar implements ActionListener {

private JMenuItem fileItem_close;

private final MouseListener mouseAction = new MouseAdapter() { //i use this to apply the mouse event

@Override

public void mouseEntered(MouseEvent e) {

JMenu item = (JMenu)e.getSource(); //is this implementation correct ?

item.setOpaque(true);

};

@Override

public void mouseExited(MouseEvent e) {

JMenu item = (JMenu)e.getSource();

item.setOpaque(false);

};

};

public Menu() {

initFileMenu();

}

private void initFileMenu() {

JMenu fileMenu = new JMenu("File");

fileMenu.setMnemonic('F');

fileMenu.setRolloverEnabled(true);

fileItem_close = new JMenuItem("Close");

fileItem_close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.ALT_MASK)); //exit on pressing (Alt+F4)

fileItem_close.addActionListener(this);

fileMenu.add(fileItem_close);

fileMenu.setRolloverEnabled(true);

fileMenu.addMouseListener(mouseAction);

fileMenu.setBackground(new Color(0x0066FF)); //The background is not visible as JMenu is not opaque by default.

add(fileMenu);

}

@Override

public void actionPerformed(ActionEvent e) {

JMenuItem source = (JMenuItem)e.getSource();

if(source == fileItem_close)

System.exit(0);

}

}

上面的代码无法正常工作,每当我将鼠标悬停在菜单标题上时都没有任何反应.

P.S:我不是GUI专家.

编辑:我正在使用Nimbus LaF

解决方法:

您可以调用setSelected()来获得悬停效果.是的,你的e.getSource()实现是正确的.所以将它改为这些行:

@Override

public void mouseEntered(MouseEvent e) {

JMenu item = (JMenu) e.getSource(); // is this implementation

// correct ?

item.setSelected(true);

};

@Override

public void mouseExited(MouseEvent e) {

JMenu item = (JMenu) e.getSource();

item.setSelected(false);

};

如果您还希望在mouseEntered()上弹出menuitems,请在mouseEntered方法中调用item.doClick(),而不是将其设置为选中状态.

编辑:

对于定制:

UIManager.put("Menu.selectionBackground", Color.BLUE);

UIManager.put("Menu.selectionForeground", Color.WHITE);

UIManager.put("Menu.background", Color.WHITE);

UIManager.put("Menu.foreground", Color.BLACK);

UIManager.put("Menu.opaque", false);

您可以将这些设置更改为您想要的任何颜色,并且比创建扩展JMenu的自己的类更舒服.

如果您还想对其他组件(例如JMenuItems)执行此操作,请查看this.您可以在那里找到所有UIManager颜色键值.

编辑2:

对于Nimbus LAF,创建一个新类:

class FillPainter implements Painter {

private final Color color;

FillPainter(Color c) {

color = c;

}

@Override

public void paint(Graphics2D g, JComponent object, int width, int height) {

g.setColor(color);

g.fillRect(0, 0, width, height);

}

}

以上是绘制背景所必需的.现在,这样做:

for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

try {

UIManager.setLookAndFeel(info.getClassName());

UIManager.getLookAndFeelDefaults().put("MenuBar:Menu[Selected].backgroundPainter",

new FillPainter(Color.BLUE));

UIManager.getLookAndFeelDefaults().put("MenuBar:Menu[Selected].textForeground", Color.WHITE);

break;

} catch (ClassNotFoundException | InstantiationException | IllegalAccessException

| UnsupportedLookAndFeelException e) {

e.printStackTrace();

}

break;

}

}

对于所有其他Nimbus LAF颜色键值,请检查this

标签:mouseover,java,swing,menu

来源: https://codeday.me/bug/20190829/1763407.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值