Java 设置JFrame不工作的大小

Java 设置JFrame不工作的大小,java,swing,jframe,Java,Swing,Jframe,我做了下面的问答,但没有一个对我有效 只想将JFrame的大小设置为一个设定的大小,但似乎不知道如何设置。读了一些文档,但我仍然缺少一些东西,希望这里的人能帮助我。多谢各位 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class CAUnit8Ch18 extends JFrame{ private JTextField txt

我做了下面的问答,但没有一个对我有效

只想将
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();
  } 

}

好的,您同时使用frame.setSize()和frame.pack()。您应该一次使用其中一个

使用setSize()可以给出所需框架的大小,但如果使用pack(),它将根据其中组件的大小自动更改框架的大小。它不会考虑你之前提到过的大小。


请尝试从代码中删除frame.pack(),或在设置大小之前将其放置,然后运行它。

调用
setSize
,而不是
setPreferredSize
pack
-这是顶级容器。更好的方法是,对框架内容使用适当的布局管理器,然后只需调用
pack
,它将为您计算大小


另外,只有在添加组件后才能调用
setVisible

感谢大家的回复。我解决了这个问题,只在添加了框架的所有内容之后才将setVisible(true)放在上面。我正在设置setVisible,然后添加面板和按钮,而我要做的是首先添加所有内容,然后将setVisible设置为true。

在setSize()之前移动包(),但不要删除它!调用pack()(frames)或validate()(applet)是GUI正确布局所必需的。或者更好的是,在框架中添加一些内容,这样布局管理器就可以计算出包装时框架应该有多大(并删除任何设置大小、首选大小、最大或(甚至可能)最小大小)或可设置大小(false)的调用);这将阻止pack()和用户调整JFrame的大小。这是错误的。再次查看给定的代码,自己尝试解决方案。这些文章编号告诉我们什么。“只需将JFrame的大小设置为一个设置大小”给定框架“chrome”在不同的外观上会有不同的大小,这意味着内容窗格的大小必须更改以适应固定大小的框架!通常更好的方法是指定内容的首选大小,使用布局填充和空白边框,然后
pack()!顺便问一下,您是否意识到该类的
main(…)
方法没有生成
CAUnit8Ch18
类的实例?先解决这个问题……)这就是我在回答中告诉你的。你应该接受我的答案(绿色的复选标记),而不是张贴你自己的答案。