java - 使用 JButton 绘制边框时,所有按钮都会消失

标签 java swing jbutton

我一直在使用 Swing 编写带有 GUI 的程序。当我使用带有绘制边框的 JButton 时,它会使所有其他按钮消失。我用最少的代码制作了一个程序,按钮工作得很好:

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);
  }
}

此代码有效,但在我的实际程序中却无效。

这是我的实际程序:

    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);

如果我将绘制的边框设置为 false 一切都很好。当我将它设置为 true 时,一切都消失了。

最佳答案

这实际上是一个非常简单的修复

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());
            }
        });
    }

关于java - 使用 JButton 绘制边框时,所有按钮都会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436774/

相关文章:

java - 将 JPanel 行添加到 JTable 模型

java - 当JButton增加JLabel中的值时获取值并放入数据库

java - 通过自定义按钮将数据从 JDialog 传递到框架

java - 如何在java中迭代列表中的列表?

java - 使用控制台读取 Intellij 的 System.in

Java线程疑惑

java - 在边框布局中添加按钮

java - 如何在Java中的任何地方创建目录?

java - 如何在不创建单独对话框的情况下验证参数?

java - 如何使 SwingWorker 多次启动..?