java - JPanel/JFrame 自动调整大小。 java

标签 java jframe jpanel

我已经为我目前正在处理的聊天制作了一个 GUI。它几乎完成了,但唯一的事情是拖动窗口时自动调整大小。我不知道为什么会这样,这是我最后的机会。所以我真的需要你们的帮助!我有点不知道

代码在这里:

ClientGUI(String host, int port) {

    super("Chat Client");
    defaultPort = port;
    defaultHost = host;



    // The CenterPanel which is the chat room
    MessageText = new JTextArea("Welcome to the Chat room\n");
    JPanel centerPanel = new JPanel();
    MessageText.setWrapStyleWord(true);
    MessageText.setLineWrap(true);

    centerPanel.setLayout(null);
    JScrollPane scrollPane = new JScrollPane(MessageText);
    scrollPane.setBounds(0, 0, 584, 486);
    getContentPane().add(scrollPane);
    MessageText.setEditable(false);
    getContentPane().add(centerPanel, BorderLayout.CENTER);
    WriteMessage = new JTextField("Write your username here!");
    WriteMessage.setBounds(0, 492, 584, 35);
    centerPanel.add(WriteMessage);
    WriteMessage.setColumns(234);
    WriteMessage.setBackground(Color.WHITE);

    // the 3 buttons
    Login = new JButton("Login");
    Login.setBounds(594, 338, 125, 35);
    centerPanel.add(Login);
    Logout = new JButton("Logout");
    Logout.setBounds(594, 469, 125, 35);
    centerPanel.add(Logout);
    Logout.addActionListener(this);
    Logout.setEnabled(false);       // you have to login before being able to logout
    Online = new JButton("Online");
    Online.setBounds(594, 403, 125, 35);
    centerPanel.add(Online);
    Online.addActionListener(this);
    Online.setEnabled(false);       // you have to login before being able to Who is in
    JLabel PortNumberText = new JLabel("Port Number:  ");
    PortNumberText.setBounds(594, 83, 144, 20);
    centerPanel.add(PortNumberText);
    PortNumber = new JTextField("" + port);
    PortNumber.setBounds(594, 114, 129, 20);
    centerPanel.add(PortNumber);
    PortNumber.setHorizontalAlignment(SwingConstants.RIGHT);

    JLabel ServerText = new JLabel("Server Address:  ");
    ServerText.setBounds(594, 21, 240, 20);
    centerPanel.add(ServerText);
    // the two JTextField with default value for server address and port number
    ServerAddress = new JTextField(host);
    ServerAddress.setBounds(594, 52, 129, 20);
    centerPanel.add(ServerAddress);
    Login.addActionListener(this);
    WriteMessage.requestFocus();

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(760, 570);
    setVisible(true);




}

http://i.gyazo.com/8d751c832f07980f884bb408d91d65d5.gif

一张图说明我的意思

最佳答案

不要使用空布局。不要使用 setBounds()。 Swing 被设计为与布局管理器一起使用。

只有在使用布局管理器时才能调整组件的大小。阅读 Swing 教程中关于 Layout Manager 的部分了解更多信息和示例。您始终可以使用多个面板,每个面板具有不同的布局管理器,以获得您想要的结果。

还遵循 Java 命名约定。变量名称不应以大写字符开头。你的名字一半是正确的,一半是错误的。保持一致!

关于java - JPanel/JFrame 自动调整大小。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29013346/

相关文章:

java - 为什么我的 JPanel 在运行模拟时不更新?

java - MapReduce - reducer 不组合键

java.sql.timestamp 与日期

java - 在 JFrame 中居中图像?

java - 如何从圆列表中选择圆以从 JFrame 中删除?

Java 滚动面板/JPanel

java - JVM 优化会破坏我的代码吗?

java - OpenFaces 3 和 IE6(按钮操作)

java - 多个 JFrame 或 JDialog

java - JLabel 在 3 行中居中内容