Java 仅使用一列时,使组件跨GridBagLayout中的多行
下面,你可以看到一个简单的例子,我试图画泰国国旗: 这面旗帜有一个特点。蓝线比其他线大两倍:Java 仅使用一列时,使组件跨GridBagLayout中的多行,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,下面,你可以看到一个简单的例子,我试图画泰国国旗: 这面旗帜有一个特点。蓝线比其他线大两倍: public class GridBagLayoutTest { private static final Insets insets = new Insets(0, 0, 0, 0); public static void main(String args[]) { final JFrame frame = new JFrame("Make a component span mult
public class GridBagLayoutTest {
private static final Insets insets = new Insets(0, 0, 0, 0);
public static void main(String args[]) {
final JFrame frame = new JFrame("Make a component span multiple rows in GridBagLayout when using only one column");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridBagLayout());
JPanel row1 = new JPanel();
row1.setBackground(new Color(237, 27, 36));
JPanel row2 = new JPanel();
row2.setBackground(Color.WHITE);
JPanel row3 = new JPanel();
row3.setBackground(new Color(26, 29, 80));
JPanel row4 = new JPanel();
row4.setBackground(Color.WHITE);
JPanel row5 = new JPanel();
row5.setBackground(new Color(237, 27, 36));
//We are trying to draw Flag of Thailand
addComponent(frame, row1, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(frame, row2, 0, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(frame, row3, 0, 2, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(frame, row4, 0, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(frame, row5, 0, 5, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH);
frame.setSize(500, 200);
frame.setVisible(true);
}
private static void addComponent(Container container, Component component, int gridx, int gridy,
int gridwidth, int gridheight, int anchor, int fill) {
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0,
anchor, fill, insets, 0, 0);
container.add(component, gbc);
}
}
我不想使用GridBagConstraint的ipady属性,因为我想在调整帧大小时保持相同的行为。
第三行(蓝色)的高度必须始终是其他行的两倍
我正在使用gridheight属性。对于蓝线,我将值2放在这个属性上,但什么也没发生
为了达到这个目标,你有什么想法吗?给你
使用GridBagLayout时,对Swing组件大小的唯一控制是使用weightx和weighty参数
我对您的代码做了一些更改,主要是为了排除其他问题
这是密码
package com.ggl.testing;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GridBagLayoutTest implements Runnable {
private static final Insets insets = new Insets(0, 0, 0, 0);
public static void main(String args[]) {
SwingUtilities.invokeLater(new GridBagLayoutTest());
}
@Override
public void run() {
JFrame frame = new JFrame(
"Make a component span multiple rows in GridBagLayout when using only one column");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createFlag());
frame.pack();
frame.setVisible(true);
}
private JPanel createFlag() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.setPreferredSize(new Dimension(450, 300));
JPanel row1 = new JPanel();
row1.setBackground(new Color(237, 27, 36));
JPanel row2 = new JPanel();
row2.setBackground(Color.WHITE);
JPanel row3 = new JPanel();
row3.setBackground(new Color(26, 29, 80));
JPanel row4 = new JPanel();
row4.setBackground(Color.WHITE);
JPanel row5 = new JPanel();
row5.setBackground(new Color(237, 27, 36));
// We are trying to draw Flag of Thailand
int gridy = 0;
addComponent(panel, row1, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row2, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row3, 0, gridy++, 1, 1, 1D, 2D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row4, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row5, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
return panel;
}
private void addComponent(Container container, Component component,
int gridx, int gridy, int gridwidth, int gridheight,
double weightx, double weighty, int anchor, int fill) {
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
gridwidth, gridheight, weightx, weighty, anchor, fill, insets,
0, 0);
container.add(component, gbc);
}
}
给你
使用GridBagLayout时,对Swing组件大小的唯一控制是使用weightx和weighty参数
我对您的代码做了一些更改,主要是为了排除其他问题
这是密码
package com.ggl.testing;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GridBagLayoutTest implements Runnable {
private static final Insets insets = new Insets(0, 0, 0, 0);
public static void main(String args[]) {
SwingUtilities.invokeLater(new GridBagLayoutTest());
}
@Override
public void run() {
JFrame frame = new JFrame(
"Make a component span multiple rows in GridBagLayout when using only one column");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(createFlag());
frame.pack();
frame.setVisible(true);
}
private JPanel createFlag() {
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
panel.setPreferredSize(new Dimension(450, 300));
JPanel row1 = new JPanel();
row1.setBackground(new Color(237, 27, 36));
JPanel row2 = new JPanel();
row2.setBackground(Color.WHITE);
JPanel row3 = new JPanel();
row3.setBackground(new Color(26, 29, 80));
JPanel row4 = new JPanel();
row4.setBackground(Color.WHITE);
JPanel row5 = new JPanel();
row5.setBackground(new Color(237, 27, 36));
// We are trying to draw Flag of Thailand
int gridy = 0;
addComponent(panel, row1, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row2, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row3, 0, gridy++, 1, 1, 1D, 2D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row4, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
addComponent(panel, row5, 0, gridy++, 1, 1, 1D, 1D,
GridBagConstraints.CENTER, GridBagConstraints.BOTH);
return panel;
}
private void addComponent(Container container, Component component,
int gridx, int gridy, int gridwidth, int gridheight,
double weightx, double weighty, int anchor, int fill) {
GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
gridwidth, gridheight, weightx, weighty, anchor, fill, insets,
0, 0);
container.add(component, gbc);
}
}
您始终可以在第3行之后添加另一个蓝色行。不是真的回答你的问题,但会解决你的问题我举了一个简单的例子来解释这个问题。实际上,这是我操纵的某个JList或某个jtext区域。因此,您的答案不可能是解决方案。您始终可以在第3行之后添加另一个蓝色行。不是真的回答你的问题,但会解决你的问题我举了一个简单的例子来解释这个问题。实际上,这是我操纵的某个JList或某个jtext区域。因此,你的答案不可能是一个解决方案。