gpt4 book ai didi

java - 窗口大小调整时的中心面板

转载 作者:行者123 更新时间:2023-11-30 03:41:22 24 4
gpt4 key购买 nike

即使调整窗口大小(如果可能),我也想将使用绝对布局创建的面板保留在窗口中央。我遇到了一些建议here和[这里][2]但没有骰子!以下是我的示例代码,有什么想法或建议吗?我将单个组件(如 JLable)居中没有问题,但我想将包含许多组件的面板居中!

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.JLabel;


public class TestPanel extends JFrame {

private JLabel lblSetupTitle;
private Border compoundBorder, outlineColorBorder, outlineBorder;
private JTextArea txtrManageData;
private JPanel childPanel;

public TestPanel()
{
setBackground(Color.white);
outlineColorBorder = BorderFactory.createLineBorder(Color.gray);
outlineBorder = BorderFactory.createEmptyBorder(20, 20, 20, 20);
compoundBorder = BorderFactory.createCompoundBorder(outlineColorBorder, outlineBorder);

lblSetupTitle = new JLabel("Setup");
lblSetupTitle.setBounds(443, 288, 44, 23);
txtrManageData = new JTextArea("Text Area Text");
txtrManageData.setBounds(393, 322, 142, 61);

childPanel = new JPanel();
childPanel.setLocation(89, 38);
childPanel.setSize(921, 452);
childPanel.setBorder(compoundBorder);

setupGUIElements();
setupPanel();
}

private void setupGUIElements()
{
txtrManageData.setBackground(null);
txtrManageData.setLineWrap(true);
txtrManageData.setWrapStyleWord(true);
}

private void setupPanel()
{
getContentPane().setLayout(new GridBagLayout()); // set layout of parent panel to GridBagLayout
childPanel.setLayout(null); // set layout of child panel to AbsoluteLayout
childPanel.add(lblSetupTitle);
childPanel.add(txtrManageData);

getContentPane().add(childPanel, new GridBagConstraints());

this.setSize(1020, 500);
}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {
TestPanel ex = new TestPanel();
ex.setVisible(true);
}
});
}
}

编辑:有关创建此类内容的任何提示、链接、指导

example gui i would like to create

最佳答案

我会嵌套布局。

enter image description here

enter image description here

import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

public class ThreeButtonTextFieldCombo {

private JPanel ui = null;

ThreeButtonTextFieldCombo() {
initUI();
}

public final void initUI() {
if (ui!=null) return;
ui = new JPanel(new GridBagLayout());
ui.setBorder(new TitledBorder("Parent Panel"));

JPanel controls = new JPanel(new GridLayout(1,0,10,10));
ui.add(controls);
controls.setBackground(Color.RED);
controls.setBorder(new TitledBorder("Child Panel"));

for (int ii=1; ii<4; ii++) {
addLabelAndField(controls, "String " + ii);
}
}

public JComponent getUI() {
return ui;
}

private void addLabelAndField(JPanel panel, String text) {
JPanel controls = new JPanel(new BorderLayout(3, 3));
controls.setBorder(new EmptyBorder(20,20,20,20));
JLabel l = new JLabel(text);
controls.add(l, BorderLayout.PAGE_START);

JTextArea ta = new JTextArea(text, 2, 8);
controls.add(new JScrollPane(ta));

panel.add(controls);
}

public static void main(String[] args) {
Runnable r = new Runnable() {

@Override
public void run() {
JFrame f = new JFrame("Three Button/Text Field Combo");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
ThreeButtonTextFieldCombo tbtfc =
new ThreeButtonTextFieldCombo();
f.setContentPane(tbtfc.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}

关于java - 窗口大小调整时的中心面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775624/

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