JPanel / JFrame自动调整大小。 JAVA

时间:2015-03-12 15:06:22

标签: 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

图片我的意思

3 个答案:

答案 0 :(得分:2)

不要使用null布局。不要使用setBounds()。 Swing旨在与布局管理器一起使用。

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

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

答案 1 :(得分:0)

您正在使用Null-Layout(绝对定位),这意味着您必须自己处理与布局相关的所有事情。最好使用LayoutManager

答案 2 :(得分:0)

好吧所以我从一开始就制作了一个边框布局,所以我觉得一切都很好,谢谢大家帮忙!看起来不那么专业。所以是的,以后可能会有更多更新:)

enter image description here