gpt4 book ai didi

java - 如何将 JLabel 和 JTextField 添加到 BorderLayout 中心的底部?

转载 作者:行者123 更新时间:2023-11-29 03:08:57 26 4
gpt4 key购买 nike

有没有办法将 JLabels 和 JTextField 添加到中心边框布局的下半部分。出于审美原因,我不希望在上半部分有任何东西,也没有找到任何方法来做到这一点。我对使用 swing 和 AWT 还是相当陌生...任何建议将不胜感激。我添加了一张我想要达到的目标的图片。

Example

最佳答案

BorderLayout.CENTER JPanel 提供一个 new GridLayout(2, 1)(2 行 1 列)。将空白 JLabel 添加到同一 JPanel 的上半部分空白区域。将另一个组件 JPanel 添加到 BorderLayout.CENTER JPanel 并让它在底部空间使用 GridBagLayout,然后使用 GridBagConstraints 添加标签和字段。这里的秘诀是嵌套 JPanel,每个都使用所选的布局管理器。

例如:

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;

import javax.swing.*;

public class Layouts {
private static final int TF_COLS = 8;

private static void createAndShowGui() {
JPanel borderLayoutPanel = new JPanel(new BorderLayout());
borderLayoutPanel.setBorder(BorderFactory
.createTitledBorder("BorderLayout Panel"));

borderLayoutPanel.add(createInnerPanel("North"), BorderLayout.PAGE_START);

borderLayoutPanel.add(createInnerPanel("North"), BorderLayout.PAGE_START);
borderLayoutPanel.add(createInnerPanel("South"), BorderLayout.PAGE_END);
borderLayoutPanel.add(createInnerPanel("East"), BorderLayout.LINE_END);
borderLayoutPanel.add(createInnerPanel("West"), BorderLayout.LINE_START);

JPanel centerPanel = new JPanel(new GridLayout(2, 1));
centerPanel.add(new JLabel());

JPanel gblPanel = new JPanel(new GridBagLayout());
gblPanel.add(new JLabel("Question 1:"), createGbc(0, 0));
gblPanel.add(new JTextField(TF_COLS), createGbc(1, 0));
gblPanel.add(new JLabel("Question 2:"), createGbc(0, 2));
gblPanel.add(new JTextField(TF_COLS), createGbc(1, 2));

centerPanel.add(gblPanel);

borderLayoutPanel.add(centerPanel);

JFrame frame = new JFrame("Layouts");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(borderLayoutPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

private static GridBagConstraints createGbc(int x, int y) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
int iGap = 5;
gbc.insets = (x == 0) ? new Insets(iGap, iGap, iGap, 3 * iGap) : new Insets(
iGap, iGap, iGap, iGap);
return gbc;
}

private static JComponent createInnerPanel(String text) {
JPanel panel = new JPanel();
panel.add(new JLabel(text));
panel.setBorder(BorderFactory.createEtchedBorder());
return panel;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

是的,这是比简单地设置边界更多的初始工作,但最终节省时间和挫败感的地方是当您以后必须维护此 GUI 时,因为如果您使用适当的布局,它将更容易调试、增强或更改您的 GUI。它还将有更好的机会在所有平台和屏幕分辨率上看起来都不错。

关于java - 如何将 JLabel 和 JTextField 添加到 BorderLayout 中心的底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30542136/

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