2010-11-29 97 views
1

我遇到的問題對我來說很奇怪,因爲我正在一步一步做正確的事情(在我看來),最後我可以說我完成了我的程序的一部分,看起來很有趣我的。實際的問題是,在我創建的GUI中,我使用了一個JPanel,然後將它放入JTabbedPane中,最後我將它放入JFrame中。一切都很好,除了沒有時間的情況以外。我知道這聽起來很奇怪,但是在運行程序之後,我得到了我想要的東西(包含面板的選項卡式窗格以及其中的某些東西),然後當我再次運行它時,它再次顯示正確的東西或者只是空框架。最糟糕的是,它是如此隨機,我不知道什麼是錯誤的,我甚至不知道我應該谷歌到底發現了什麼。該代碼是:JTabbedPane隨機顯示

import java.awt.Dimension; 
import java.awt.Toolkit; 
import javax.swing.*; 

public class GUI extends JFrame { 

JFrame frame = new JFrame("WakeOnLan script generator"); 
JPanel panel1 = new JPanel(null); 
JTextArea text; //= new JTextArea("test"); 
JScrollPane scroll = new JScrollPane(); 
JButton but = new JButton("test"); 
JTabbedPane tab = new JTabbedPane(); 

public GUI() { 

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
    int w = frame.getSize().width; 
    int h = frame.getSize().height; 
    int x = (dim.width-w)/3; 
    int y = (dim.height-h)/4; 

    frame.setSize(500,500); 
    frame.setLocation(x,y); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    frame.setLayout(null); 

    createTab1(); 

    tab.addTab("Tab 1", panel1); 
    tab.setVisible(true); 
    tab.setBounds(0, 0, 500, 500); 

    frame.add(tab); 

} 

public void createTab1(){ 

    text = new JTextArea("test"); 
    text.setVisible(true); 

    scroll.setViewportView(text); 
    scroll.setBounds(10,10,465,300); 

    panel1.setLayout(null); 
    panel1.add(scroll); 
    panel1.setVisible(true); 
    panel1.setSize(500,500); 
    //panel.setBackground(Color.blue); 
    } 

    } 

然後我只要運行它的主要方法,其他類:

public class GUIStarter { 

public static void main(String[] args) { 

    GUI start = new GUI(); 

} 

} 

所以任何人都可以給我一個答案或只是一個暗示? 謝謝。

回答

2

您應該在之後將所有組件添加到您的JFrame中,然後撥打frame.setVisible(true)。所以試着把它移到你的構造函數的末尾。

或者,您可以在添加完所有組件後調用frame.validate()

+0

非常感謝!現在工作! – Lucas 2010-11-29 13:52:06