我在以下Q& As中做了什么,但没有一个对我有用。
只想将JFrame
的大小调整为设定的大小,但似乎无法弄清楚如何。阅读一些文档,但我仍然遗漏了一些东西,希望这里有人可以帮助我。谢谢。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
public class CAUnit8Ch18 extends JFrame{
private JTextField txtfield;
private JLabel label;
public CAUnit8Ch18() {
setTitle("Color Change Frame");
//setSize(900,500); this does not seem to work
setPreferredSize(new Dimension(500,300));
pack();
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
createContents();
}
private void createContents() {
JPanel jp = new JPanel();
label = new JLabel("What is your name:");
txtfield = new JTextField(20);
jp.setOpaque(false);
Container contentPane = getContentPane();
Random rand = new Random();
int n = rand.nextInt(4);
switch(n){
case 0:
contentPane.setBackground(Color.RED);
label.setForeground(Color.WHITE);
break;
case 1:
contentPane.setBackground(Color.WHITE);
break;
case 2:
contentPane.setBackground(Color.YELLOW);
break;
case 3:
contentPane.setBackground(Color.GREEN);
label.setForeground(Color.BLUE);
break;
case 4:
contentPane.setBackground(Color.BLUE);
label.setForeground(Color.WHITE);
break;
}
jp.add(label);
jp.add(txtfield);
txtfield.addActionListener(new Listener());
add(jp);
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String message = "Thanks for playing, " + txtfield.getText();
txtfield.setVisible(false);
label.setText(message);
}
}
public static void main(String[] args) {
JOptionPane.showMessageDialog(null,
"The following window color will be randomly chosen from\nRed, White, Yellow, Green, Blue");
new CAUnit7Ch17();
}
}
答案 0 :(得分:1)
好吧,你正在使用frame.setSize()和frame.pack()。你应该一次使用其中一个。
使用setSize()可以给出所需的帧大小,但如果使用pack(),它将根据其中组件的大小自动更改帧的大小。它不会考虑你之前提到的尺寸。
尝试从代码中删除frame.pack()或在设置大小之前将其放置,然后运行它。
答案 1 :(得分:1)
致电setSize
而不是setPreferredSize
和pack
- 这是一个顶级容器。更好的是,使用适当的布局管理器来处理框架的内容,然后只需调用pack
,它将为您计算尺寸。
此外,只有在添加组件后才应调用setVisible
。
答案 2 :(得分:0)
感谢大家的回复。我通过在添加框架的所有内容之后放置setVisible(true)来解决问题。我正在设置setVisible然后添加面板和按钮,当我应该做的是先添加所有内容然后将setVisible设置为true。