这是一个奇怪的问题。我有一个解决方案,但我不知道为什么问题出现在第一位。请注意以下代码:
// VERSION 1
public class test {
public static void main(String[] args) {
JFrame mainFrame = new JFrame("Test");
JPanel inputPanel = new JPanel();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.getContentPane().add(BorderLayout.CENTER, inputPanel);
mainFrame.setBounds(100, 50, 200, 100);
mainFrame.setVisible(true);
JButton inputFileButton = new JButton("BROWSE");
inputPanel.add(inputFileButton);
}
}
它按预期工作。该按钮不执行任何操作,但它可以正确呈现。现在,我添加一个JFileChooser(我打算稍后再做一些事情,但是现在我所做的只是实例化它)。
// VERSION 2
public class test {
public static void main(String[] args) {
JFrame mainFrame = new JFrame("Test");
JPanel inputPanel = new JPanel();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.getContentPane().add(BorderLayout.CENTER, inputPanel);
mainFrame.setBounds(100, 50, 200, 100);
mainFrame.setVisible(true);
JFileChooser inputFileChooser = new JFileChooser(); // NEW LINE
JButton inputFileButton = new JButton("BROWSE");
inputPanel.add(inputFileButton);
}
}
我的按钮突然不再呈现。为什么?我知道有两种方法可以让它再次发挥作用,但这对我来说都没有任何意义。一种解决方法:
// VERSION 3
public class test {
public static void main(String[] args) {
JFrame mainFrame = new JFrame("Test");
JPanel inputPanel = new JPanel();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.getContentPane().add(BorderLayout.CENTER, inputPanel);
mainFrame.setBounds(100, 50, 200, 100);
mainFrame.setVisible(true);
JButton inputFileButton = new JButton("BROWSE");
inputPanel.add(inputFileButton);
JFileChooser inputFileChooser = new JFileChooser(); // MOVE LINE TO END
}
}
因此将该行移动到最后允许按钮再次渲染,但对于我来说,实例化的JFileChooser与未连接按钮的关系仍然没有意义。我可以解决这个问题的另一种方法:
// VERSION 4
public class test {
public static void main(String[] args) {
JFrame mainFrame = new JFrame("Test");
JPanel inputPanel = new JPanel();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.getContentPane().add(BorderLayout.CENTER, inputPanel);
mainFrame.setBounds(100, 50, 200, 100);
JFileChooser inputFileChooser = new JFileChooser();
JButton inputFileButton = new JButton("BROWSE");
inputPanel.add(inputFileButton);
mainFrame.setVisible(true); // MOVE *THIS* LINE TO THE END
}
}
为什么上面的版本修复了这个问题是有道理的...显然JFileChoose实例化的一些东西让我的按钮不可见,但是这个setVisible()方法随后将它带回了光明之中。但这仍然没有告诉我为什么它首先变得无形。
有人可以帮我弄清楚我错过了什么吗?谢谢!
答案 0 :(得分:5)
您正在显示mainFrame
,然后添加按钮。请查看this SO question,了解您需要采取哪些步骤以确保按钮可见。
它在你的第一个例子中起作用的原因可能是纯粹的运气。您将在EDT显示您的组件之前执行添加按钮的调用。
注意:请在EDT上执行Swing操作