Cut*_*ter 2 java swing jlabel jframe 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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如雷默斯所说——
setBounds()Swing 新手来说似乎是创建复杂 GUI 的最简单、最好的方法,但您创建的 Swing GUI 越多,在使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整组件的大小,它们是增强或维护的皇家女巫,当放置在滚动窗格中时,它们会完全失败,在所有平台或与原始分辨率不同的屏幕分辨率上查看时,它们看起来非常糟糕。setVisible(true)(而不是之前)调用JFrame 。请注意,您对 setVisible(true) 的工作原理感到困惑。是的,您在子组件上调用它,但默认情况下它们已经将其可见属性设置为 true,因此在子组件上调用它没有效果。您的问题是当您在 JFrame 上调用 setVisible 时。您在添加带有文本字段的 JPanel 之前调用它,因此这会导致它偶尔出现。亲自证明一下。如果 texzt 字段不可见,则最小化并恢复 GUI,它现在应该显示。
我自己,如果我想像上面那样交换视图,我会使用CardLayout。
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |