有时摆动文本字段有时它不会出现吗?

时间:2016-09-25 15:13:07

标签: java swing jframe jlabel jtextfield

我有一段代码,有时运行良好,有时不会。我确实没有改变任何东西,但有时文本字段会出现,有时它不会出现。代码怎么可能每次都以不同的方式运行?对我来说完全是无稽之谈。我对Java很新,但我当然不认为这是可能的......

如果有人可以帮助我,你能否提供修复,还有为什么会这样?因为我想完全理解这个问题。

这是我的代码:

import javax.swing.*;

public class Window {
    JFrame frame;
    JPanel panel;

    public Window(int x, int y, String t, boolean isHomePage){

        int xSize = x;
        int ySize = y;
        String title = t;

        frame = new JFrame();
        frame.setSize(xSize, ySize);
        frame.setLocationRelativeTo(null);
        frame.setTitle(title);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        panel = new JPanel();
        frame.add(panel);
        panel.setLayout(null);
        panel.setVisible(true);

        if (isHomePage){
            homePage();
        }


    }

    public void homePage(){

        JLabel usernameLabel = new JLabel();
        usernameLabel.setText("Please enter your username:");
        usernameLabel.setBounds(0,100,300,20);
        panel.add(usernameLabel);
        usernameLabel.setVisible(true);

        JTextField textbox = new JTextField();
        textbox.setVisible(true);
        textbox.setBounds(280,100,400,20);
        panel.add(textbox);

    }


}

1 个答案:

答案 0 :(得分:4)

正如Reimeus所说 -

  1. 使用布局管理器而不是null布局。虽然null布局和setBounds()似乎是Swing新手,比如创建复杂GUI的最简单和最好的方法,但是你创建的Swing GUI越多,你在使用它们时会遇到更严重的困难。 。当GUI调整大小时,他们不会调整组件的大小,他们是增强或维护的皇室女巫,当他们放置在滚动窗格中时,他们完全失败,当他们在所有平台或屏幕分辨率不同时看起来很糟糕原来的。
  2. 在之后在JFrame 上调用setVisible(true)将所有组件添加到GUI,而不是之前。
  3. 请注意,您对setVisible(true)的工作原理感到困惑。是的,您在子组件上调用它,但是默认情况下它们已经将其可见属性设置为true,因此在子组件上调用它不会产生任何影响。您的问题是当您在JFrame上调用setVisible时。您在添加带有文本字段的JPanel之前调用它,因此这会导致它偶尔出现。为自己证明。如果texzt字段不可见,则最小化并恢复GUI,现在应该显示。

    我自己,如果我想在你上面尝试交换视图时,我会使用CardLayout