我正在使用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
主要适用于int
,String
等类型,因此您必须切换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,因此更容易理解,为什么我要使用按钮。
但要明确:我的问题是不关于视觉效果,而是如果有办法写行
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));