如何使用Java Swing制作非边界箭头按钮?

问题描述

我正在使用Java Swing制作UI,其想法是使其看起来像本机OS(在本例中为Windows)。我用过:

setLookAndFeel(getSystemLookAndFeelClassName());
@H_502_4@

到目前为止,一切都很好,除了一个小细节。我正在尝试使用箭头按钮来隐藏/显示JTextArea@H_502_4@,如MS's documentation中所述,没有边框,如下所示:

enter image description here

我尝试使用BasicArrowButton@H_502_4@,如下所示:

BasicArrowButton arrowButton = new BasicArrowButton(EAST);
        arrowButton.addActionListener((e) -> {
            if (textArea.isVisible()) {
                textArea.setVisible(false);
                arrowButton.setDirection(EAST);
            } else {
                textArea.setVisible(true);
                arrowButton.setDirection(SOUTH);
            }
        });
@H_502_4@

但是我只得到带边框的,如下所示:

enter image description here

我已经尝试过玩边框和背景,但是没有运气。

是否有一种巧妙的方法可以使它正常工作?

谢谢。

解决方法

使用setBorderPainted方法。

您不需要使用BasicArrowButton;您可以使用常规的JButton,从而遵循当前的外观:

JButton leftButton = new JButton("\u25c2");
JButton rightButton = new JButton("\u25b8");
JButton upButton = new JButton("\u25b4");
JButton downButton = new JButton("\u25be");

leftButton.setBorderPainted(false);
rightButton.setBorderPainted(false);
upButton.setBorderPainted(false);
downButton.setBorderPainted(false);

(这些字符是Unicode规范的Geometric Shapes块中的“小箭头”字符。)

您可能还希望隐藏焦点轮廓并启用翻转:

leftButton.setFocusPainted(false);
rightButton.setFocusPainted(false);
upButton.setFocusPainted(false);
downButton.setFocusPainted(false);

leftButton.setRolloverEnabled(true);
rightButton.setRolloverEnabled(true);
upButton.setRolloverEnabled(true);
downButton.setRolloverEnabled(true);

或者,除了调用setRolloverEnabled之外,您可能希望将每个按钮添加到JToolBar中,这将启用翻转,并且在某些外观上,除非鼠标悬停在该按钮上,否则该按钮将保持透明它。