【问题标题】:Why doesn't this GridBagLayout code work?为什么这个 GridBagLayout 代码不起作用?
【发布时间】:2014-05-23 11:35:25
【问题描述】:

我有下面的代码。

类似的代码可以工作。还有一位朋友说它应该工作。但事实并非如此。

有人知道吗?

谢谢!

问题描述:

不是绘制所需的布局,而是一切都非常小......(

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class ChatGUI extends JPanel {

    private static final long serialVersionUID = -3069354983197916315L;
    private Image imgBackground;

    private GridBagLayout gblChat;
    private GridBagConstraints constraintsChat;

    private JPanel jPanelChat;
    private JList clientList;

    private JColorChooser font_chooser;

    private JButton privateMessage_button;
    private JButton sendMessage_button;

    private JScrollPane OutputOfChatMessages;
    private JScrollPane ShowConnectedClients;
    private JScrollPane InputOfChatMessage;

    public static void main(String[] args) {

        JFrame jf = new JFrame();

        ChatGUI cg1 = new ChatGUI(500, 500);

        jf.add(cg1);

        jf.setExtendedState(Frame.MAXIMIZED_BOTH);
        jf.setVisible(true);
    }

    /**
     * Layout
     */
    public ChatGUI(int width, int height) {

        // used for scaling
        this.setMinimumSize(new Dimension(width / 2,
                height / 4));
        this.setPreferredSize(new Dimension(width / 2,
                height / 4));

        jPanelChat = new JPanel();
        gblChat = new GridBagLayout();
        constraintsChat = new GridBagConstraints();

        this.setLayout(gblChat);
        this.setBackground(Color.LIGHT_GRAY);
        constraintsChat.fill = GridBagConstraints.BOTH;

        /**
         * Panel 1 = OutputOfChatMessages
         */
        OutputOfChatMessages = new JScrollPane();

        constraintsChat.gridx = 0;
        constraintsChat.gridy = 0;
        constraintsChat.gridwidth = 1;
        constraintsChat.gridheight = 1;
        gblChat.setConstraints(OutputOfChatMessages, constraintsChat);

        this.add(OutputOfChatMessages);

        /**
         * Panel 2 = ShowConnectedClients
         */
        ShowConnectedClients = new JScrollPane();

        constraintsChat.gridx = 1;
        constraintsChat.gridy = 0;
        constraintsChat.gridwidth = 4;
        constraintsChat.gridheight = 4;
        gblChat.setConstraints(ShowConnectedClients, constraintsChat);

        this.add(ShowConnectedClients);

        /**
         * Panel 3 = InputOfChatMessage
         */
        InputOfChatMessage = new JScrollPane();

        constraintsChat.gridx = 0;
        constraintsChat.gridy = 5;
        constraintsChat.gridwidth = 2;
        constraintsChat.gridheight = 2;
        gblChat.setConstraints(InputOfChatMessage, constraintsChat);

        this.add(ShowConnectedClients);

        /**
         * Panel 4 = privateMessage_button
         */
        privateMessage_button = new JButton();

        constraintsChat.gridx = 1;
        constraintsChat.gridy = 6;
        constraintsChat.gridwidth = 1;
        constraintsChat.gridheight = 1;
        gblChat.setConstraints(privateMessage_button, constraintsChat);

        this.add(privateMessage_button);

        /**
         * Panel 5 = sendMessage_button
         */
        sendMessage_button = new JButton();

        constraintsChat.gridx = 1;
        constraintsChat.gridy = 7;
        constraintsChat.gridwidth = 1;
        constraintsChat.gridheight = 1;
        gblChat.setConstraints(sendMessage_button, constraintsChat);

        this.add(sendMessage_button);

        this.validate();
//this.revalidate();

    }
}

【问题讨论】:

  • 你的程序调试了吗?
  • 因为没有编译器错误而且这很可能是一个逻辑错误,所以没有。
  • 所以你还没有调试你的程序。您也不需要编译器错误来调试。
  • 非常有帮助,谢谢。调试器怎么会告诉我我需要知道才能看到错误?
  • 例如;它可以帮助您在逻辑上逐步执行程序,直到您能够更清楚地看到发生的错误。

标签: java swing layout gridbaglayout


【解决方案1】:
  1. 您没有为滚动窗格设置视图,因此它们无法确定其首选大小。
  2. 您没有在按钮上设置文本,所以它只计算按钮对边框的要求的大小
  3. 不要乱用setXxxSize,您的ChatGUI 应该不知道它可能需要占据的可视大小。

【讨论】:

  • @MadProfessor:是的,这就是轨道。我必须检查 1) 明天,现在迟到。但是 2) 完全有道理,所以我只能说:DOH!我可能会想到这个 rly ......所以谢谢! To 3):大小将由另一个调用 chatGUI 的类设置为主 JFrame 内的窗格。无论如何:谢谢!
猜你喜欢
  • 2018-11-05
  • 2012-02-22
  • 2023-03-03
  • 2017-10-02
  • 2016-07-10
  • 2010-12-14
  • 2017-04-09
  • 2013-01-30
  • 1970-01-01
相关资源
最近更新 更多