呼。我在这个问题上一直困扰着这么久。我正在做一个模拟流行测验的GUI程序。但是当我希望我的程序像这样时,我不知道要放的代码是什么......
当我点击开始按钮时,面板应该是这样的......
到目前为止,这就是我对启动菜单的看法......
public static void main (String []args){
JFrame f = new JFrame("Pop Quiz");
f.setSize(400,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.setResizable(false);
JPanel p1 = new JPanel();
p1.setSize(400,100);
p1.setLocation(0,0);
p1.setLayout(new GridLayout(3,1));
f.add(p1);
JLabel l1 = new JLabel("Welcome to POP Quiz!");
p1.add(l1);
JLabel l2 = new JLabel("Enter your name:");
p1.add(l2);
final JTextField name = new JTextField ();
p1.add(name);
JPanel p2 = new JPanel();
p2.setSize(400,50);
p2.setLocation(0,225);
f.add(p2);
JButton start = new JButton ("Start");
p2.add(start);
start.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String player = name.getText();
//what should be added here to change the contents of the panel?
}
});
f.show();
}
对于问题......
public static void main(String[] args){
JFrame f = new JFrame("Pop Quiz");
f.setSize(400,300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.setResizable(false);
JPanel p1 = new JPanel();
p1.setSize(400,100);
p1.setBackground(Color.PINK);
f.add(p1);
JLabel question = new JLabel();
question.setText("In computers, what is the smallest and basic unit of information storage?");
p1.add(question);
JPanel p2 = new JPanel();
p2.setSize(400,175);
p2.setLocation(0,100);
p2.setLayout(new GridLayout(2,4));
f.add(p2);
JButton a = new JButton("a. Bit");
p2.add(a);
JButton b = new JButton("b. Byte");
p2.add(b);
JButton c = new JButton("c. Data");
p2.add(c);
JButton d = new JButton("d. Newton");
p2.add(d);
f.show();
}
我有人可以提供帮助,我真的很感激。提前致谢!祝你今天愉快! :)
答案 0 :(得分:1)
使用CardLayout
。如图所示here。
f.setLayout(null);
使用布局!我不能强调这一点。布局可能看起来很复杂,但它们是在GUI中布置复杂的组件组的唯一可行解决方案,旨在用于不同平台(PLAF,屏幕分辨率......)。
JButton a = new JButton("a. Bit");
p2.add(a);
JButton b = new JButton("b. Byte");
// ..
鉴于用于按钮的字符串的性质,它们似乎最好是JComboBox
,JList
或ButtonGroup
中的按钮。
f.show();
不推荐使用此方法,您的编译器应该警告您不推荐使用此方法,或者还有其他警告被忽略。查看这些警告,修复它们。方法因某种原因而被弃用。
答案 1 :(得分:0)
尝试f.getContentPane()。add(panel);
答案 2 :(得分:0)
Try this..
public class test {
public static void main(String[] args) {
final JFrame f = new JFrame("Pop Quiz");
f.setSize(400, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(null);
f.setResizable(false);
final JPanel p1 = new JPanel();
p1.setSize(400, 100);
p1.setLocation(0, 0);
p1.setLayout(new GridLayout(3, 1));
f.add(p1);
JLabel l1 = new JLabel("Welcome to POP Quiz!");
p1.add(l1);
JLabel l2 = new JLabel("Enter your name:");
p1.add(l2);
final JTextField name = new JTextField();
p1.add(name);
final JPanel p2 = new JPanel();
p2.setSize(400, 50);
p2.setLocation(0, 225);
f.add(p2);
JButton start = new JButton("Start");
p2.add(start);
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String player = name.getText();
p1.setVisible(false);
p2.setVisible(false);
JPanel testPanel = new JPanel();
testPanel.setSize(400, 100);
testPanel.setBackground(Color.PINK);
f.add(testPanel);
JLabel question = new JLabel();
question.setText("<html>In computers, what is the smallest and basic unit<br/> of information storage?</html>");
testPanel.add(question);
JPanel p2 = new JPanel();
p2.setSize(400, 175);
p2.setLocation(0, 100);
p2.setLayout(new GridLayout(2, 4));
f.add(p2);
JButton a = new JButton("a. Bit");
p2.add(a);
JButton b = new JButton("b. Byte");
p2.add(b);
JButton c = new JButton("c. Data");
p2.add(c);
JButton d = new JButton("d. Newton");
p2.add(d);
f.show();
}
});
f.show();
}
}
答案 3 :(得分:0)
实现这一目标的步骤:
1.创建主面板并添加到JFrame
2.将内容添加到主 JPanel
中的 welcomePanel 。
3.用户按下 welcomePanel 中的“开始”按钮。在主容器上拨打removeAll()
4.在主要 JPanel
的 contentPanel 中添加新内容,并致电revalidate()
,这将更新主。
注意:对于此
,您不需要单独的jframe实例