gpt4 book ai didi

java - 在 JFrame 中设置布局的问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:31 25 4
gpt4 key购买 nike

我正在尝试在面板中设置文本框和标签,但文本框的大小不合适,布局也设置不正确

public class FrameLayout1 implements ActionListener {
JTextField[] txtName;
JLabel[] lblname;
JCheckBox keyButton;
JCheckBox cascadeButton;
JComboBox SetList;
JComboBox ClassList;
JLabel[] lblType;
JTextField txtJoinColumn;
JLabel[] lblAssoType;
JTextField[] txtJoinColumnAssoc;

FrameLayout1(){

}
public void setDetailsPanel()
{

txtName = new JTextField[10];
txtJoinColumnAssoc = new JTextField[10];
lblname=new JLabel[10];
lblType=new JLabel[10];
lblAssoType=new JLabel[20];
JFrame ColumnFrame=new JFrame("Enter the Column Values");

int i=0;

JPanel panel = new JPanel(new GridLayout(0,1,5,10));

for (i=0;i<5;i++)
{
JPanel panelTxtLbl = new JPanel(new GridLayout(0,2));
lblname[i] = new JLabel("label"+i+":", JLabel.LEFT);
panelTxtLbl.add(lblname[i]);

txtName[i] = new JTextField(15);
panelTxtLbl.add(txtName[i]);

panel.add(panelTxtLbl);
lblType[i] = new JLabel("labeldata", JLabel.LEFT);
panel.add(lblType[i]);


String[] SetStrings = { "One to Many","Many to Many" };
SetList = new JComboBox(SetStrings);
SetList.setSelectedIndex(1);
panel.add(SetList);

cascadeButton = new JCheckBox("cascade");
cascadeButton.setSelected(true);
panel.add(cascadeButton);

JPanel panelSetClass = new JPanel(new GridLayout(0,2));
for(int j=0;j<3;j++)
{
lblAssoType[j]=new JLabel("Label Inner"+j+":", JLabel.LEFT);
panelSetClass.add(lblAssoType[j]);

txtJoinColumnAssoc[j] = new JTextField(15);
panelSetClass.add(txtJoinColumnAssoc[j]);

}
panel.add(panelSetClass);
panel.add(createHorizontalSeparator());
}


//detailsPanel.add(panel, BorderLayout.CENTER);
//detailsPanel.setAutoscrolls(true);
panel.setAutoscrolls(true);
JButton button = new JButton("Submit");
button.addActionListener(this);
//detailsPanel.add(button,BorderLayout.PAGE_END);
panel.add(button,BorderLayout.PAGE_END);

Color c=new Color(205, 222, 216);
ColumnFrame.setLayout(new BorderLayout());
ColumnFrame.add(panel,BorderLayout.CENTER);
//ColumnFrame.setSize(700,600);
ColumnFrame.setBackground(c);
ColumnFrame.pack();
ColumnFrame.setVisible(true);
ColumnFrame.setLocation(200, 200);
}
/*
* to add a horizontal line in the panel
*/
static JComponent createHorizontalSeparator() {
JSeparator x = new JSeparator(SwingConstants.HORIZONTAL);
x.setPreferredSize(new Dimension(3,2));
return x;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}


}

createHorizo​​ntalSeparator 函数可以帮助您在面板中添加水平线,因为我无法分隔字段。

电流输出

Imgur

所需输出

Imgur

最佳答案

今天,我回答了类似的question其中 GridLayout 造成的结果大致相同困惑。为自己服务并使用灵活的布局管理器(如果可能的话)像 MigLayout 一样创建您的布局。这些简单的内置布局管理器的应用非常有限(GridLayoutFlowLayoutBorderLayout),否则可能会变得具有挑战性用它们创建复杂的布局(BoxLayout)。

GridLayoutBorderLayout 拉伸(stretch)其组件并且不拉伸(stretch)尊重 child 的体型限制。这就是你为什么有那些不必要的空格以及为什么按钮水平扩展。

以下是模仿您的布局的示例。它是用创建的强大的 MigLayout 管理器。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;


public class DetailsPanel extends JFrame {

public DetailsPanel() {

initUI();

setTitle("Details");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

private void initUI() {

setLayout(new MigLayout("ins 10, wrap 2", "[][grow]"));

add(new JLabel("Label 1:"));
add(new JTextField(), "w 200, growx");

add(new JLabel("Label 2:"));
add(new JTextField(), "growx");

add(new JLabel("Label 3:"));
add(new JTextField(), "gaptop 30, growx");

add(new JLabel("Label 4:"));
add(new JTextField(), "growx");

add(new JLabel("Label 5:"));
add(new JTextField(), "gaptop 30, growx");

add(new JLabel("Label 6:"));
add(new JTextField(), "growx");

add(new JButton("Submit"), "gaptop 30, skip, right");


pack();
}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DetailsPanel ex = new DetailsPanel();
ex.setVisible(true);
}
});
}
}

你需要花一些时间来学习更复杂的布局管理器,但是它得到了返回。特别是,如果您经常在 Swing 中构建布局。

Details

关于java - 在 JFrame 中设置布局的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24625113/

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