2016-09-25 73 views
1

我有一段代码,有时运行正常,有时没有。我从字面上看不会改变任何东西,但有时文本字段会出现,有时不会出现。代码如何可能每次都以不同的方式运行?对我来说完全是无稽之谈。我有理由对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); 

    } 


} 
+2

使用布局管理器 – Reimeus

回答

4

由于Reimeus州 -

  1. 使用布局管理器不为空布局。虽然Swing的新手可能看起来像是创建复杂GUI的最简单也是最好的方式,但更多Swing GUI的创建使用它们时会遇到更严重的困难。它们不会在GUI大小调整时调整组件的大小,它们是增强或维护的皇室女巫,当它们放在滚动窗格中时它们会完全失败,在所有平台或屏幕分辨率与原始视图不同时,它们看起来会非常糟糕。
  2. 将所有组件的图形用户界面,而不是之前之后也叫setVisible(true)上的JFrame

请注意,您对setVisible(true)的工作方式感到困惑。是的,你在你的子组件上调用它,但是默认情况下它们已经将它们的可见属性设置为true,所以在子组件上调用它不起作用。你的问题是当你在JFrame上调用setVisible的时候。您在添加带有文本字段的JPanel之前调用它,所以这会导致它偶尔出现。证明它为你自己。如果texzt字段不可见,则最小化和恢复您的GUI,现在应显示它。

我自己,如果我想你尽力以上做交换意见,我会使用一个CardLayout

+0

好吧,我明白了。但是,你能解释一下为什么它有时会起作用,而不是其他的?当然,如果它是一组代码,它应该每次都完全一样? – Cutter

+1

@Cutter:那是因为你对如何'调用setVisible(真)'作品混淆。是的,你在你的子组件上调用它,但是默认情况下它们已经将它们的可见属性设置为true,所以在子组件上调用它不起作用。你的问题是当你在JFrame上调用setVisible的时候。在添加带有文本字段的JPanel之前,您正在调用它**,所以这会导致它偶尔出现。证明它为你自己。如果texzt字段不可见,则最小化和恢复您的GUI,现在应显示它。 –

+0

好的,是的,谢谢你的好解释! – Cutter

相关问题