Java 添加JTextField时不显示任何内容
如果将代码从第一个示例更改为第二个示例,则不会显示任何内容(请参见屏幕截图: 主要类别:Java 添加JTextField时不显示任何内容,java,swing,user-interface,jtextfield,event-dispatch-thread,Java,Swing,User Interface,Jtextfield,Event Dispatch Thread,如果将代码从第一个示例更改为第二个示例,则不会显示任何内容(请参见屏幕截图: 主要类别: public class Main extends JTabbedPane { public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exceptio
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());
}
}
毕达哥拉斯(截图1):
毕达哥拉斯(截图2):
毕达哥拉斯(截图3):
始终在事件分派线程中使用Swing组件。主方法的整个代码都应该包装到
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// original code here
}
});
此更改使所有内容在我的测试中都按预期显示
阅读和
另外,请注意,只使用字符串作为参数的JTextField构造函数会创建一个列数为0的文本字段。这不是我最好的语言,但我认为您的构造函数是私有的?在Java中,构造函数总是公共的(您无需自己手动指定)。无论如何,这不是问题所在,我已经创建构造函数多年了,没有任何私有/公共的添加。@Hidde:构造函数在Java中并不总是公共的。它们的可见性规则与方法的规则相同。如果没有可见性修饰符,则构造函数是受包保护的,而不是公共的。要尽快获得更好的帮助,请发布一篇文章。这很奇怪,有时候你的代码会按照你的期望给出正确的输出,有时候它不会在代码中做任何更改。所以你的UI外观和感觉似乎与此有关。请,让你对这件事有更多的启发。@ProphesyWaitis:我在我的回答中添加了两个有用的链接谢谢,这是我在奥格顿。
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);
public class Pythagoras extends JPanel{
Pythagoras() {
super();
setLayout(new FlowLayout());
add( new JLabel("This works!"));
}
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// original code here
}
});
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);