有没有办法在一个用于MouseListener的开关案例中使用actionCommand?

时间:2016-02-19 10:48:32

标签: java swing switch-statement mouselistener

我正在使用Java swing应用程序中的导航面板。

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

  • 订单状态
  • 检查报告
  • 文档
  • ...
  • 返回主菜单

导航中的元素是重新配置的JButtons,看起来像标签,如果鼠标悬停在它们上面以加强下划线以模拟超链接导航,则会加下划线。

这很好用,但我在按钮上使用MouseListener一个ActionListener,因为我希望能够将鼠标悬停在按钮上进行注册,鼠标光标离开按钮等)和if-statements检查,点击了哪个按钮/标签。

    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-statements转换为switch-case并检查,点击了哪个按钮。 Switch-case主要适用于intString等类型,因此您必须切换String为例。

如果已为重新配置的ActionListener注册了JButtons,则可以使用switch-case这样的内容:

switch(e.getActionCommand()) {
    case: "Order status":
          ....
    case: "Check reports":
          ....
}

注意:之前未设置getActionCommand()!如果未设置,则默认为按钮文字!

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

另一种方法是获取源代码并将其转换为JButton,它可以工作,但可能会比它更长,更不优雅:

switch(((JButton) e.getSource.getText())){...

那么MouseListener-switch是否有办法使用与e.getActionCommand()类似的内容?或者演员方法是否已被接受?

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

My navigation

但要明确:我的问题是关于视觉效果,而是如果有办法写行

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用粗体加下划线。我也曾尝试使用<html><u>buttontext</u></html>,但不知怎的,我无法正确地强调文本下划线。所以我使用了这里显示的方法:

@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));

0 个答案:

没有答案