java - 如何在Java中的GridBagLayout中使网格不同?

标签 java user-interface gridbaglayout

我想要实现的是这样的:

enter image description here

这是我的代码:

JDialog messageDialog = new JDialog();
messageDialog.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
messageDialog.setBounds(0, 0, 350, 250);
messageDialog.setLocationRelativeTo(null);
messageDialog.setVisible(true);

JPanel btnPanel = new JPanel();
JPanel clearPanel = new JPanel();
JPanel labelsPanel = new JPanel();
JPanel txtPanel = new JPanel();
JButton newMessage = new JButton("New");
JButton recievedMessages = new JButton("Recieved");
JButton sendMessages = new JButton("Sent");
JButton refreshMessages = new JButton("Refresh");
JLabel recievedMessLab = new JLabel("Messages get:");
JTextPane txtToSend = new JTextPane();

btnPanel.setLayout(new GridLayout(4, 1));
btnPanel.add(newMessage);
btnPanel.add(recievedMessages);
btnPanel.add(sendMessages);
btnPanel.add(refreshMessages);

c.gridx = 0;
c.gridy = 0;
messageDialog.add(clearPanel, c);

c.gridx = 1;
c.gridy = 0;
messageDialog.add(labelsPanel, c);

c.gridx = 0;
c.gridy = 1;
messageDialog.add(btnPanel, c);

c.gridx = 1;
c.gridy = 1;
messageDialog.add(txtPanel, c);

labelsPanel.add(recievedMessLab);

我不知道为什么所有面板周围都有一些可用空间,而且我不知道如何调整网格大小。 Oracle 教程也没有帮助。调整其大小的最简单方法是什么?如何摆脱该可用空间?

最佳答案

您需要将权重填充信息添加到您的GridBagConstraints中,以便布局管理器知道哪些组件要在可用空间上延伸。

尝试以下操作:

c.gridx = 0;
c.gridy = 0;
c.fill = c.NONE;  // dont fill (strech)
messageDialog.add(clearPanel, c);

c.gridx = 1;
c.gridy = 0;
c.weightx = 1; // horizontal weight: 1
c.fill = c.HORIZONTAL; // fill (strech) horizontally
messageDialog.add(labelsPanel, c);

c.gridx = 0;
c.gridy = 1;
c.weightx = 0; // horizontal weight: back to 0
c.weighty = 1; // vertical weight: 1
c.fill = c.VERTICAL; // fill (strech) vertically
messageDialog.add(btnPanel, c);

c.gridx = 1;
c.gridy = 1;
c.weightx = 1; // both weights: 1
c.weighty = 1; // both weights: 1
c.fill = c.BOTH; // and fill both ways, vertically and horizontally
messageDialog.add(txtPanel, c);

重温教程中有关 weightxweightyfill 的部分,了解它们的工作原理。

PS:txtPanel 为空且 txtToSend 从未使用过?

关于java - 如何在Java中的GridBagLayout中使网格不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41653209/

相关文章:

java - 谷歌 BigQuery : loading data from a local CSV file using the Java API with custom field delimiter

java - 多个组件的复杂布局

c# - 商业C#图表控件-跨技术

java - 使用 GridBagLayout 调整大小不当

java - Atmosphere + Spring + Autowiring 问题

java - 使用 fragment 时避免重复代码的最佳方法

html - 如何在CSS中为文本创建内阴影效果?

java - 为什么 GridBagLayout 会强制我的组件具有一定的高度?

java - BorderLayout.CENTER 上 GridBagLayout 面板的垂直对齐

java - 如何确定日期/时间是 EDT 还是 Java 中的 EST?