I’m using Java Swing to make a UI and the idea is to make it look like the native OS (in this case, Windows). I’ve used:
setLookAndFeel(getSystemLookAndFeelClassName());
And everything is good so far, except for one little detail. I’m trying to use the arrow buttons to hide/show a JTextArea
like the ones described in MS’s documentation, the ones with no border as shown here:
I’ve tried using BasicArrowButton
as shown below:
BasicArrowButton arrowButton = new BasicArrowButton(EAST); arrowButton.addActionListener((e) -> { if (textArea.isVisible()) { textArea.setVisible(false); arrowButton.setDirection(EAST); } else { textArea.setVisible(true); arrowButton.setDirection(SOUTH); } });
But I only get the ones with borders, as shown here:
I’ve already tried playing around with borders and backgrounds but had no luck.
Is there a neat way to get this working?
Thanks.
Advertisement
Answer
Use the setBorderPainted method.
You don’t need to use BasicArrowButton; you can use a regular JButton, and thus adhere to the current look-and-feel:
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);
(Those characters are the “small arrow” characters from the Geometric Shapes block of the Unicode specification.)
You probably also want to hide the focus outline and enable rollover:
leftButton.setFocusPainted(false); rightButton.setFocusPainted(false); upButton.setFocusPainted(false); downButton.setFocusPainted(false); leftButton.setRolloverEnabled(true); rightButton.setRolloverEnabled(true); upButton.setRolloverEnabled(true); downButton.setRolloverEnabled(true);
Alternatively, instead of calling setRolloverEnabled
, you may want to add each button to a JToolBar, which will enable rollover, and in some look-and-feels, will leave the button transparent unless the mouse is rolled over it.