1

我遇到的问题对我来说很奇怪,因为我正在逐步正确地(在我看来)做所有事情,最后当我可以说我完成了我的程序的一部分时,它似乎在取笑我。实际的问题是,在我创建的 GUI 中,我使用了 JPanel,然后我将它放入了 JTabbedPane,我最终将它放入了 JFrame。一切都很好,除了不正常的时候也可以正常工作。我知道这听起来很奇怪,但是在运行程序后,一旦我得到了我想要的东西(带有选项卡式窗格的框架,其中包含带有一些东西的面板),然后当我再次运行它时,它要么再次显示正确的内容,要么只是空框架。最糟糕的是,它是如此随机,我不知道可能出了什么问题,我什至不知道我到底应该在谷歌上找到什么。代码是:

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

   }

然后我只是在其他类的 main 方法中运行它:

public class GUIStarter {

public static void main(String[] args) {

    GUI start = new GUI();

}

}

那么任何人都可以给我一个答案或只是一个提示吗?谢谢你。

4

1 回答 1

2

您应该在将所有组件添加到 JFrameframe.setVisible(true) 后调用。因此,请尝试将其移至构造函数的末尾。

或者,您可以frame.validate()在添加所有组件后调用。

于 2010-11-29T13:24:16.280 回答