问题描述
我正在使用Java Swing制作UI,其想法是使其看起来像本机OS(在本例中为Windows)。我用过:
setLookAndFeel(getSystemLookAndFeelClassName());
@H_502_4@
到目前为止,一切都很好,除了一个小细节。我正在尝试使用箭头按钮来隐藏/显示JTextArea@H_502_4@,如MS's documentation中所述,没有边框,如下所示:
我尝试使用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@
但是我只得到带边框的,如下所示:
我已经尝试过玩边框和背景,但是没有运气。
是否有一种巧妙的方法可以使它正常工作?
谢谢。
解决方法
使用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中,这将启用翻转,并且在某些外观上,除非鼠标悬停在该按钮上,否则该按钮将保持透明它。