我有一个[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();
}
}
答案 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
答案 1 :(得分:1)
您应该将临时面板设置为JFrame的内容窗格。
添加
setContentPane( temp );
在使用setVisible( true );
显示框架之前。