Reputation: 206
I've been making a program with a GUI using Swing. When I use a JButton with the draw border it makes all other buttons disappear. I have made a program with just the minimal code and the buttons work perfectly fine:
public class ShowError {
public static void main(String[] args) {
JFrame _GameWindow = new JFrame("Trivial Pursuit");
_GameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
_GameWindow.setSize(800, 650);
_GameWindow.setResizable(false);
_GameWindow.setVisible(true);
JPanel _MainMenu = new JPanel();
_MainMenu.setLayout(new FlowLayout(FlowLayout.CENTER));
_GameWindow.add(_MainMenu);
ImageIcon[] _PlayerButtonImage = new ImageIcon[5];
for (int i = 2; i < _PlayerButtonImage.length; i++) {
_PlayerButtonImage[i] = new ImageIcon("Images/" + i + "PlayerButton.png");
}
ImageIcon _HowToPlayButtonImage = new ImageIcon("Images/HowToPlayButton.png");
JButton[] _PlayerButton = new JButton[5];
for (int i = 2; i < _PlayerButton.length; i++) {
_PlayerButton[i] = new JButton(_PlayerButtonImage[i]);
_MainMenu.add(_PlayerButton[i]);
_PlayerButton[i].setOpaque(true);
_PlayerButton[i].setPreferredSize(new Dimension(271,123));
_PlayerButton[i].setContentAreaFilled(true);
_PlayerButton[i].setBorderPainted(true);
_PlayerButton[i].setFocusPainted(true);
}
JButton _HowToPlayButton = new JButton(_HowToPlayButtonImage);
_MainMenu.add(_HowToPlayButton);
_HowToPlayButton.setOpaque(true);
_HowToPlayButton.setContentAreaFilled(true);
_HowToPlayButton.setBorderPainted(true);
_HowToPlayButton.setPreferredSize(new Dimension(271,123));
_HowToPlayButton.setFocusPainted(true);
}
}
This code works but when it's in my actual program it doesn't work.
This is from my actual program:
JButton[] _PlayerButton = new JButton[5];
for (int i = 2; i < _PlayerButton.length; i++) {
_PlayerButton[i] = new JButton(_PlayerButtonImage[i]);
_MainMenu.add(_PlayerButton[i]);
_PlayerButton[i].setOpaque(true);
_PlayerButton[i].setPreferredSize(new Dimension(271, 123));
_PlayerButton[i].setContentAreaFilled(true);
_PlayerButton[i].setBorderPainted(true);
_PlayerButton[i].setFocusPainted(true);
}
JButton _HowToPlayButton = new JButton(_HowToPlayButtonImage);
_MainMenu.add(_HowToPlayButton);
_HowToPlayButton.setOpaque(false);
_HowToPlayButton.setContentAreaFilled(true);
_HowToPlayButton.setBorderPainted(false);
If I set the border painted to false
everything is fine. When I set it to true
everything disappears.
Upvotes: 3
Views: 168
Reputation: 206
This was actually a really simple fix
JButton[] _PlayerButton = new JButton[4];
for (int i = 0; i < _PlayerButton.length; i++) {
final int FinalI = i;
_PlayerButton[i] = new JButton(_PlayerButtonImage[i]);
_MainMenu.add(_PlayerButton[i]);
_PlayerButton[i].setOpaque(false);
_PlayerButton[i].setPreferredSize(new Dimension(271, 123));
_PlayerButton[i].setContentAreaFilled(false);
_PlayerButton[i].setBorder(BorderFactory.createEmptyBorder());
_PlayerButton[i].addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
_PlayerButton[FinalI].setBorder(BorderFactory.createLoweredBevelBorder());
}
public void mouseExited(java.awt.event.MouseEvent evt) {
_PlayerButton[FinalI].setBorder(BorderFactory.createEmptyBorder());
}
});
}
Upvotes: 3