[英]Adjusting the height of a JPanel
我有一個頂部面板,面板的流布局具有文本字段和標簽。 我需要在第一行下方添加更多文本字段和標簽。 我意識到沒有真正的方法可以強制在flowlayout中添加新行,所以我只是要制作一個新面板並將其放在頂部面板的下面。 問題是現在存在間隙,因為頂板的高度太高。 有沒有一種方法可以調整面板的大小,使其寬度自動適應屏幕,但我想調整新面板的高度,因此間隙較小。 頂部的兩個文本字段在頂部具有Flowlayout,下面的3個文本字段在新面板中具有FlowLayout,是否有辦法使3個文本字段在頂部的2個文本字段的正下方? 而且,整個框架都處於網格布局中。
frame.setLayout(new GridLayout(0,1));
Static JPanel topPanel = new JPanel(new flowlayout);
Static JPanel searchPanel = new JPanel(new flowlayout);
Static JPanel statusPanel = new JPanel(new gridLayout(2,1));
Static JPanel categoryPanel = new JPanel(new GridLayout(0.2));
Static JPanel btnPanel = new JPanel(new GridLayout(0,3));
frame.pack();
topPanel.add(searchPanel);
JPanel container2 = new JPanel(new BorderLayout()):
container2.add(topPanel, BorderLayout.North);
frame.getContentPane().add(container2);
frame.getContentPane().add(statusPanel);
frame.getContentPane().add(catergoryPanel);
frame.getContentPane().add(btnPanel);
帶有GridLayout
的JPanel
是問題-可能已添加到容器的BorderLayout.CENTER
中,因此它遍及整個可用空間。 它還具有相等的像元大小。 將網格包裝到BorderLayout
並將其添加到BorderLayout.NORTH
或者將GridBagLayout
用於面板。
這是一個示例,演示了如何在示例中布置面板以及如何在其他布局中布置面板。 我認為這將使您清楚為什么GridLayout
以這種方式表現。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Example {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
}
public Example() {
// GridLayout
JPanel container1 = new JPanel(new GridLayout(2, 1));
container1.add(createExamplePanel());
container1.add(createExamplePanel());
// GridLayout inside BorderLayut (NORTH)
JPanel panel = new JPanel(new GridLayout(2, 1, 0, 5 /* margin */)); // You could also use other layouts here, e.g. a BoxLayout
panel.add(createExamplePanel());
panel.add(createExamplePanel());
JPanel container2 = new JPanel(new BorderLayout());
container2.add(panel, BorderLayout.NORTH);
// GridBagLayout
JPanel container3 = new JPanel(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.PAGE_START;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.insets = new Insets(0, 0, 5 /* margin */, 0);
constraints.weightx = 1.0;
container3.add(createExamplePanel(), constraints);
constraints.gridy = 1;
constraints.weighty = 1.0;
constraints.insets = new Insets(0, 0, 0, 0);
container3.add(createExamplePanel(), constraints);
JPanel contentPane = new JPanel(new GridLayout(1, 3, 5, 5));
contentPane.add(createTitledPanel(container1, "GridLayout"));
contentPane.add(createTitledPanel(container2, "GridLayout inside BorderLayout (NORTH)"));
contentPane.add(createTitledPanel(container3, "GridBagLayout"));
JFrame frame = new JFrame("Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(contentPane);
frame.setSize(800, 600);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createTitledPanel(JComponent content, String title) {
JPanel panel = new JPanel(new BorderLayout());
panel.add(content);
panel.setBorder(BorderFactory.createTitledBorder(title));
return panel;
}
private JPanel createExamplePanel() {
JPanel panel = new JPanel();
panel.add(new JLabel("Panel"));
panel.setBorder(BorderFactory.createLineBorder(Color.GRAY));
return panel;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.