[英]java swing GridBagLayout space left
我堅持使用java GridBagLayout。 這里只剩下一個問題了。 我希望中間面板(“測試標簽2”)占據所有垂直空間。
怎么做到這一點?
謝謝。
package com;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
public class Test1 {
private void _panel1(JPanel panel){
panel.setBorder(new LineBorder(Color.RED));
panel.setLayout(new GridBagLayout());
JPanel panel1 = new JPanel();
panel1.add(new JLabel(" Testing Label 1 "));
panel1.setBorder(new TitledBorder("P1"));
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.weighty = 0.0;
panel.add(panel1, c);
JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 1;
c.weightx = 1.0;
c.weighty = 1.0;
panel.add(panel2, c);
JPanel panel3 = new JPanel();
panel3.setBorder(new TitledBorder("P3"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.NORTH;
c.gridx = 0;
c.gridy = 2;
c.weightx = 1.0;
c.weighty = 0.0;
panel3.setLayout(new GridLayout(5,1));
for(int i=0; i<5; i++){
panel3.add(new JButton("button "+i));
}
panel.add(panel3, c);
}
public Test1(){
JFrame frame = new JFrame();
frame.setTitle("test 1");
frame.getContentPane().setLayout(new GridLayout(1,3));
JPanel panel1 = new JPanel();
_panel1(panel1);
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
frame.getContentPane().add(panel1);
frame.getContentPane().add(panel2);
frame.getContentPane().add(panel3);
frame.setSize(800, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
Test1 t = new Test1();
}
}
我剛換了一行(27):
final JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
// You have to use BOTH for the panel to take
// all vertical and horizontal space
c.fill = GridBagConstraints.BOTH;
您正在將panel2
的網格約束設置為HORIZONTAL
。
問候,
考慮將panelBagConstraint的填充字段更改為BOTH for panel2:
panel2.setBorder(new TitledBorder("P2"));
c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH; // *****
c.anchor = GridBagConstraints.NORTH;
無論是那個還是更簡單的解決方案,只需使用BorderLayout:
panel.setBorder(new LineBorder(Color.RED));
panel.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
panel1.add(new JLabel(" Testing Label 1 "));
panel1.setBorder(new TitledBorder("P1"));
panel.add(panel1, BorderLayout.NORTH);
JPanel panel2 = new JPanel();
panel2.add(new JLabel(" Testing Label 2"));
panel2.setBorder(new TitledBorder("P2"));
panel.add(panel2, BorderLayout.CENTER);
JPanel panel3 = new JPanel();
panel3.setBorder(new TitledBorder("P3"));
panel3.setLayout(new GridLayout(5, 1));
for (int i = 0; i < 5; i++) {
panel3.add(new JButton("button " + i));
}
panel.add(panel3, BorderLayout.SOUTH);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.