如果我将代码从第一个示例更改为第二个示例,则不会显示任何内容(请参阅屏幕截图:
主要课程:
public class Main extends JTabbedPane {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame f = new JFrame("Math");
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = dim.getWidth() > 800 ? (int) (dim.getWidth() / 2 - 400) : 0;
int y = dim.getWidth() > 800 ? (int) (dim.getHeight() / 2 - 300) : 0;
f.setBounds(x, y, 800, 600);
f.setResizable(false);
f.setContentPane(new Main());
}
Main() {
super();
addTab("Pythagoras", new Pythagoras());
}
}
Pythagoras(截图1):
public class Pythagoras extends JPanel{
Pythagoras() {
super();
setLayout(new FlowLayout());
JTextField j = new JTextField("Hi :)");
add(j);
}
}
Pythagoras(截图2):
public class Pythagoras extends JPanel{
Pythagoras() {
super();
setLayout(new FlowLayout());
}
}
Pythagoras(截图3):
public class Pythagoras extends JPanel{
Pythagoras() {
super();
setLayout(new FlowLayout());
add( new JLabel("This works!"));
}
}
答案 0 :(得分:2)
始终在事件派发线程中使用Swing组件。主要方法的整个代码应该包含在
中SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// original code here
}
});
此更改使我的测试中的所有内容都显示为预期。
阅读http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html和http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading
另外,请注意,只接受String作为参数的JTextField构造函数会创建一个文本字段,其中0为列数。
答案 1 :(得分:0)
JFrame f = new JFrame("Math");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int x = dim.getWidth() > 800 ? (int) (dim.getWidth() / 2 - 400) : 0;
int y = dim.getWidth() > 800 ? (int) (dim.getHeight() / 2 - 300) : 0;
f.setContentPane(new Main());
f.setBounds(x, y, 800, 600);
f.setResizable(false);
f.setVisible(true);