Java 有没有一种方法可以在鼠标侦听器的开关盒中使用actionCommand?

Java 有没有一种方法可以在鼠标侦听器的开关盒中使用actionCommand?,java,swing,switch-statement,mouselistener,Java,Swing,Switch Statement,Mouselistener,我正在Java swing应用程序中的导航面板上工作 在左侧,我有一个导航菜单: 订单状态 检查报告 文件 返回主菜单 重新配置导航中的元素JButtons,如果鼠标悬停在这些元素上以模拟超链接导航,则这些元素看起来像标签,并带有下划线 这很好,但是我在按钮上使用了鼠标侦听器(不是操作侦听器,因为我希望能够注册鼠标悬停在按钮上,鼠标光标离开按钮等)和if语句来检查单击了哪个按钮/标签 if (e.getSource() == btn_orderStatus) { /

我正在Java swing应用程序中的导航面板上工作

在左侧,我有一个导航菜单:

  • 订单状态
  • 检查报告
  • 文件
  • 返回主菜单
重新配置导航中的元素
JButtons
,如果鼠标悬停在这些元素上以模拟超链接导航,则这些元素看起来像标签,并带有下划线

这很好,但是我在按钮上使用了
鼠标侦听器(不是
操作侦听器,因为我希望能够注册鼠标悬停在按钮上,鼠标光标离开按钮等)和
if语句来检查单击了哪个按钮/标签

    if (e.getSource() == btn_orderStatus) {
        // Clean everything, then hang in the MAIN navigation panel
        buttonPanel.setVisible(true);
        createLandingPage("centerPanel");
        pageCards.show(centerPanel, "PageOne");
    }

    if (e.getSource() == btn_goBack) {
        // Clean everything, then hang in the MAIN navigation panel
        buttonPanel.setVisible(false);
        createLandingPage("empty");
    }

    if (e.getSource() == btn_checkReport) {
        ...
    }
由于以后导航可能会更长,我想将
if语句
转换为
开关盒
,然后检查单击了哪个按钮
Switch case
主要用于
int
String
等类型,因此您必须切换
字符串

当有一个
ActionListener
注册到重新配置的
JButtons
时,您可以像这样使用
开关盒

switch(e.getActionCommand()) {
    case: "Order status":
          ....
    case: "Check reports":
          ....
}
注意:
getActionCommand()
以前从未设置过!如果未设置,则默认为按钮文本

但由于我使用的是
MouseListener
而不是
ActionListener
,因此没有
e.getActionCommand()

另一种选择是获取源代码并将其转换为
JButton
,该按钮可以工作,但可能比它更长,也不那么优雅:

switch(((JButton) e.getSource.getText())){...
那么,有没有一种方法可以让
鼠标侦听器开关
使用类似于
e.getActionCommand()
的东西呢?还是cast方法已经可以接受

编辑:这是我的导航GIF,因此更容易理解我为什么要使用按钮

但要明确的是:我的问题不是关于视觉效果,而是是否有一种方式来写这句话

switch(((JButton) e.getSource.getText())){...
通过使用类似于
e.getActionComman()
的东西来缩短/更优雅,这在
MouseListener
中是不存在的

EDIT2:

这就是我如何将我的
JButtons
更改为
JLabels

for (JButton jButton : navigationButtonSecondList) {
    jButton.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
    jButton.setBorderPainted(true);
    jButton.setContentAreaFilled(false);
    jButton.setFocusPainted(false);
    jButton.setHorizontalAlignment(SwingConstants.LEFT);
    jButton.addMouseListener(this);
    jButton.setEnabled(false);
    jButton.setFont(new Font("SansSerif", Font.PLAIN, 12));
}
编辑3:

使用此代码,重新加工的
JButtons
以粗体显示并加下划线。我还尝试使用
按钮文本
,但不知何故,我无法正确地取消文本下划线。因此,我使用了如下所示的方法:

@Override
public void mouseEntered(MouseEvent e) {
    // Makes the text in the labels / JButtons bold and "pop out", so the
    // user sees, which label / JButton they are hovering over
    JButton buttonSourceHelper = ((JButton) e.getSource());
    buttonSourceHelper.setFont(new Font("SansSerif", Font.BOLD, 12));
    // This is used to underline the labels (JButtons) in order to make them
    // look like hyperlinks
    Font font = buttonSourceHelper.getFont();
    Map attributes = font.getAttributes();
    attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
    buttonSourceHelper.setFont(font.deriveFont(attributes));
}
当鼠标退出
JButton
时,我只需将字体大小恢复为12,然后
PLAIN

buttonHelper.setFont(new Font("SansSerif", Font.PLAIN, 12));

。按钮(不是ActionListener,因为我希望能够注册鼠标悬停在按钮上…为什么?请看@AndrewThompson:当鼠标悬停在按钮/标签上时,字体将变为粗体并加下划线,如果鼠标离开按钮/标签,字体将变为普通且不再加下划线。此外,我并不反对使用不同的方法,我只是好奇是否有办法实现我在问题中描述的内容。这可能是achi通过将文本写入图像,并将其用作(正常)的图标来实现图标、悬停图标、按下图标等。另外,将文本加粗通常会使其变宽,这反过来可能会改变组件的位置。如果我要制作文本图标,我会先进行加粗,并使所有图标的大小与该图标的大小相同。@hamena314我仍然不确定您为什么要使用MouseStener。但您仍然可以添加广告d ActionListener即使您已经添加了鼠标侦听器,也可以将其添加到您的按钮上。这难道不能解决您的问题吗?除此之外,还有其他一些方法。@AndrewThompson:有趣的想法,尽管我不得不承认,我还没有看到使用图标而不是使用重新配置的按钮的优势,这些按钮看起来像
JLabels
按钮可以通过键盘访问,而图标不会iirc?是的,将文本加粗会使文本占用更多的空间,但由于导航面板有相当大的空间,这不是问题。相反,用户会得到一个很好的可用性反馈,他确切地停留在哪个元素上。