JFrame中没有显示任何内容

时间:2013-11-07 13:55:41

标签: java swing

我有一个[JFrame] [1]这个类,但没有任何东西出现。但是,如果我删除了setLayout,则会显示临时面板,但是如果我添加其他组件则不会显示。我现在已经添加了面板

public class GenerateQuestions extends JFrame {
    List<ButtonGroup> btngp;

    GenerateQuestions() {
    setSize(400, 400);
    btngp = new LinkedList<ButtonGroup>();

    String[] contents =
    {
        "Test1", "Test2", "Test3", "Test4"
    };
    SpringLayout z = new SpringLayout();
    setLayout(z); 
    JPanel temp = new JPanel(); 
    SpringLayout sl = new SpringLayout();
    temp.setLayout(sl);
    JLabel x = new JLabel("This is a test question generator for online assesment ");
    temp.add(x);
    sl.putConstraint(SpringLayout.NORTH, x, 5, SpringLayout.NORTH, temp);
    sl.putConstraint(SpringLayout.WEST, x, 5, SpringLayout.WEST, temp); 

    ButtonGroup btn = new ButtonGroup();
    int counterNorth = 15;
    int counterWest = 15;
    for (int i = 0; i < contents.length; i++) {
        JRadioButton t = new JRadioButton(contents[i]);
        btn.add(t);
        temp.add(t);
        sl.putConstraint(SpringLayout.NORTH, t, counterNorth, SpringLayout.NORTH, x);
        sl.putConstraint(SpringLayout.WEST, t, counterWest, SpringLayout.WEST, temp);
        if (i % 2 == 0) {
        counterWest += 75;
        } else {
        counterWest -= 75;
        counterNorth += 25;
        }
    }
    btngp.add(btn);
    z.putConstraint(SpringLayout.NORTH, temp, 10, SpringLayout.NORTH, this);
    z.putConstraint(SpringLayout.WEST, temp, 10, SpringLayout.WEST, this);
    setVisible(true);
    getContentPane().add(temp);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    }

    public static void main(String[] args) {
        new GenerateQuestions();
    }
}

2 个答案:

答案 0 :(得分:2)

您将所有组件添加到temp面板,但您从未将该面板添加到JFrame。 <{1}}之前添加此行setContentPane(temp);,一切正常。

编辑:如果您想为setVisible(true);使用JFrame添加更多一个面板,例如LayoutManager

GridLayout

或者你可以使用 getContentPane().setLayout(new GridLayout(2,2)); getContentPane().add(temp); getContentPane().add(new JLabel("test")); 这样BorderLayout它也可以帮助你。

默认情况下,您的getContentPane().setLayout(new BorderLayout());面板有getContentPane(),无法显示带有preferedSize(0,0)的组件。如果要使用它,则必须指定组件的大小,例如:FlowLayout

LayoutManager

GridLayout

BorderLayout

答案 1 :(得分:1)

您应该将临时面板设置为JFrame的内容窗格。

添加

setContentPane( temp );
在使用setVisible( true );显示框架之前