我想知道以下几点:我有一个 MainWindow 组件(其中包含一个框架 (JFrame))和其他几个 JPanel。其中一个 JPanel,假设 gridPanel 使用 gridLayout 作为 LayoutManager。现在我的问题是我想在调整窗口大小后调整(设置行的大小/设置列的大小)。有人可以告诉我如何实现在调整框架大小后可以触发的操作,因为我不熟悉所涉及的听众。
它应该是在最“标准”的编码实践中完成的。感谢您的回复和解答!
我想知道以下几点:我有一个 MainWindow 组件(其中包含一个框架 (JFrame))和其他几个 JPanel。其中一个 JPanel,假设 gridPanel 使用 gridLayout 作为 LayoutManager。现在我的问题是我想在调整窗口大小后调整(设置行的大小/设置列的大小)。有人可以告诉我如何实现在调整框架大小后可以触发的操作,因为我不熟悉所涉及的听众。
它应该是在最“标准”的编码实践中完成的。感谢您的回复和解答!
如果您希望您的网格“填充”一个容器,或者填充 JFrame,那么关键是使用适当的布局管理器来保存使用 GridLayout 的容器。例如,如果您将使用 GridLayout 的容器添加到另一个使用 FlowLayout 的容器中,则使用 GridLayout 的容器不会在其容纳容器改变大小时改变大小。但是,如果将使用 GridLayout 的容器添加到另一个使用 BorderLayout 的容器及其 BorderLayout.CENTER 位置,则使用 GridLayout 的容器将随着使用 BorderLayout 的父容器调整大小而调整大小。
例子:
import java.awt.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class ExpandingGrid extends JPanel {
private static final int GAP = 5;
public ExpandingGrid() {
// create a BorderLayout-using JPanel
JPanel borderLayoutPanel = new JPanel(new BorderLayout());
borderLayoutPanel.setBorder(BorderFactory.createTitledBorder("BorderLayout Panel"));
borderLayoutPanel.add(createGridPanel(), BorderLayout.CENTER); // add a Grid to it
// create a FlowLayout-using JPanel
JPanel flowLayoutPanel = new JPanel(new FlowLayout());
flowLayoutPanel.setBorder(BorderFactory.createTitledBorder("FlowLayout Panel"));
flowLayoutPanel.add(createGridPanel()); // add a grid to it
// set up the main JPanel
setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
setLayout(new GridLayout(1, 0, GAP, 0)); // grid with 1 row
// and add the borderlayout and flowlayout using JPanels to it
add(borderLayoutPanel);
add(flowLayoutPanel);
}
// create a JPanel that holds a bunch of JLabels in a GridLayout
private JPanel createGridPanel() {
int rows = 5;
int cols = 5;
JPanel gridPanel = new JPanel(new GridLayout(rows, cols));
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
// create the JLabel that simply shows the row and column number
JLabel label = new JLabel(String.format("[%d, %d]", i, j),
SwingConstants.CENTER);
// give the JLabel a border
label.setBorder(BorderFactory.createEtchedBorder());
gridPanel.add(label); // add to the GridLayout using JPanel
}
}
return gridPanel;
}
private static void createAndShowUI() {
JFrame frame = new JFrame("ExpandingGrid");
frame.getContentPane().add(new ExpandingGrid());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
createAndShowUI();
}
});
}
}
此外,如果这没有帮助,那么您可能希望详细说明您的问题和邮政编码,最好是SSCCE。
这就是为什么我只想调整列。
也许Wrap Layout是您正在寻找的。