Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加JTextField时不显示任何内容_Java_Swing_User Interface_Jtextfield_Event Dispatch Thread - Fatal编程技术网

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