gpt4 book ai didi

java - GridBagLayout 格式不正确

转载 作者:行者123 更新时间:2023-12-01 10:02:17 25 4
gpt4 key购买 nike

我试图让配置面板占据屏幕顶部,然后将输入和输出面板并排放置。我还尝试让每个文本区域宽 70 个字符,高 30 行。然而,现在,配置面板根本没有显示,文本区域只有 35 个字符宽和 2 行高。我遵循了我找到的所有示例和教程。我做错了什么?

public class BorderWrapper {
public static void main(String[] args) {
//Create frame
JFrame frame = new JFrame("Border Wrapper");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Create main panel
MainPanel panel = new MainPanel();
frame.getContentPane().add(panel, BorderLayout.NORTH);

//Display frame
Dimension minSize = new Dimension(650, 375);
frame.setPreferredSize(minSize);
frame.setMinimumSize(minSize);
frame.pack();
frame.setVisible(true);
}
}



public class MainPanel extends JPanel {
private static final Font INPUT_FONT = new Font("Monospaced", Font.PLAIN, 12);

private JTextArea inputArea, outputArea;
private JTextField titleField, topBorderField, sideBorderField;

public MainPanel() {
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();

//Set up config panel
JPanel configPanel = new JPanel();
configPanel.setLayout(new BoxLayout(configPanel, BoxLayout.X_AXIS));
configPanel.setMaximumSize(new Dimension(400, 200));

titleField = new JTextField(25);
titleField.setFont(INPUT_FONT);
topBorderField = new JTextField(1);
topBorderField.setFont(INPUT_FONT);
sideBorderField = new JTextField(4);
sideBorderField.setFont(INPUT_FONT);

configPanel.add(new JLabel("Title:"));
configPanel.add(titleField);
configPanel.add(new JLabel("Top border:"));
configPanel.add(topBorderField);
configPanel.add(new JLabel("Side border:"));
configPanel.add(sideBorderField);

c.gridwidth = 2;
c.gridx = 0;
c.gridy = 0;
add(configPanel, c);

//Set up Input panel
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.Y_AXIS));
inputArea = new JTextArea("Type or paste your stuff here . . .");
inputArea.setFont(INPUT_FONT);
inputArea.setLineWrap(true);
inputArea.setWrapStyleWord(true);
inputArea.setColumns(75);
JScrollPane inputPane = new JScrollPane(inputArea);
inputPane.setMinimumSize(new Dimension(250, 400));

JLabel inputLabel = new JLabel("Text Box");
inputLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
inputPanel.add(inputLabel);
inputPanel.add(inputPane);
inputPanel.setMinimumSize(new Dimension(250, 400));

c.gridwidth = 1;
c.gridx = 0;
c.gridy = 1;
add(inputPanel, c);

//Set up Output panel
JPanel outputPanel = new JPanel();
outputPanel.setLayout(new BoxLayout(outputPanel, BoxLayout.Y_AXIS));
outputArea = new JTextArea();
outputArea.setFont(INPUT_FONT);
outputArea.setLineWrap(true);
outputArea.setWrapStyleWord(true);
outputArea.setColumns(75);
JScrollPane outputPane = new JScrollPane(outputArea);
outputPane.setMinimumSize(new Dimension(250, 400));

JLabel outputLabel = new JLabel("Wrapped Output");
outputLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
outputPanel.add(outputLabel);
outputPanel.add(outputPane);
outputPanel.setMinimumSize(new Dimension(250, 400));

c.gridwidth = 1;
c.gridx = 1;
c.gridy = 1;
add(outputPanel, c);
}
}

最初,我打算尝试使用 BorderLayout,因为它似乎对我尝试制作的布局最有意义,但当我将它们设置为 BorderLayout.WEST 和 BorderLayout 时,效果甚至更糟。东方。

最佳答案

已修改您的程序以在 MainPanel 中使用 BorderLayout 并进行一些其他细微更改以获得所需的外观。检查这是否有帮助。

public class BorderWrapper {
public static void main(String[] args) {
// Create frame
JFrame frame = new JFrame("Border Wrapper");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Create main panel
MainPanel panel = new MainPanel();
frame.getContentPane().add(panel);

// Display frame
Dimension minSize = new Dimension(650, 375);
frame.setPreferredSize(minSize);
frame.setMinimumSize(minSize);
frame.pack();
frame.setVisible(true);
}
}

class MainPanel extends JPanel {
private static final Font INPUT_FONT = new Font("Monospaced", Font.PLAIN, 12);

private JTextArea inputArea, outputArea;
private JTextField titleField, topBorderField, sideBorderField;

public MainPanel() {
setLayout(new BorderLayout());

// Set up config panel
JPanel configPanel = new JPanel();
configPanel.setLayout(new BoxLayout(configPanel, BoxLayout.X_AXIS));
configPanel.setMaximumSize(new Dimension(400, 200));

titleField = new JTextField(25);
titleField.setFont(INPUT_FONT);
topBorderField = new JTextField(1);
topBorderField.setFont(INPUT_FONT);
sideBorderField = new JTextField(4);
sideBorderField.setFont(INPUT_FONT);

configPanel.add(new JLabel("Title:"));
configPanel.add(titleField);
configPanel.add(new JLabel("Top border:"));
configPanel.add(topBorderField);
configPanel.add(new JLabel("Side border:"));
configPanel.add(sideBorderField);

add(configPanel, BorderLayout.NORTH);

// Set up Input panel
JPanel lowerPanel = new JPanel(new GridLayout(1, 1));
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.Y_AXIS));
inputArea = new JTextArea("Type or paste your stuff here . . .");
inputArea.setFont(INPUT_FONT);
inputArea.setLineWrap(true);
inputArea.setWrapStyleWord(true);
inputArea.setColumns(75);
JScrollPane inputPane = new JScrollPane(inputArea);

JLabel inputLabel = new JLabel("Text Box");
inputLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
inputPanel.add(inputLabel);
inputPanel.add(inputPane);

lowerPanel.add(inputPanel);

// Set up Output panel
JPanel outputPanel = new JPanel();
outputPanel.setLayout(new BoxLayout(outputPanel, BoxLayout.Y_AXIS));
outputArea = new JTextArea();
outputArea.setFont(INPUT_FONT);
outputArea.setLineWrap(true);
outputArea.setWrapStyleWord(true);
outputArea.setColumns(75);
JScrollPane outputPane = new JScrollPane(outputArea);

JLabel outputLabel = new JLabel("Wrapped Output");
outputLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
outputPanel.add(outputLabel);
outputPanel.add(outputPane);

lowerPanel.add(outputPanel);
add(lowerPanel, BorderLayout.CENTER);
}
}

enter image description here

我觉得使用这种格式的 BorderLayout 很方便。无论如何,您仍然可以对使用 GridBagConstraints 发布的代码进行一些更改以获得所需的外观。一一进行以下更改,您将观察到差异。

1.您使用 BorderLayout 将 MainPanel 与北对齐。但在您的情况下,整个组件集都放置在 MainPanel 中,因此最好将其放置在中心。因此,不要使用下面的 NORTH :(在此更改后,您将看到完整的输入和输出面板)

MainPanel panel = new MainPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);

2.您已将Parent框架的尺寸设置为Dimension(height=375)

minSize = new Dimension(650, 375);

您的组件(configPanel=200,outputPanel=400)组合高度超过375。将Parent的高度增加到大约600。

3.尝试使用 GridLayout 作为 configPanel,而不是 BoxLayout。

configPanel.setLayout(new GridLayout(1,6,5,0));

对现有代码进行上述 3 项更改将获得预期的输出。希望这一点能够澄清。

关于java - GridBagLayout 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com