我正在尝试在面板中设置文本框和标签,但文本框的大小不合适,布局也没有正确设置
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
}
}
createHorizontalSeparator函数可以帮助您在面板中添加水平线,因为我无法隔离字段。
当前输出
所需的输出
答案 0 :(得分:1)
今天,我回答了一个类似的question,其中GridLayout
造成的情况大致相同
混乱。自己做一个服务并使用灵活的布局管理器
(如果可能的话)像MigLayout
一样创建布局。这些
简单的内置布局管理器应用程序非常有限
(GridLayout
,FlowLayout
,BorderLayout
)或者它可能变得具有挑战性
用它们创建柔和的布局(BoxLayout
)。
GridLayout
和BorderLayout
拉伸他们的组件而不是
尊重他们孩子的大小范围。这就是你的原因
有那些不必要的空格以及按钮水平扩展的原因。
以下是模仿布局的示例。它创建于
强大的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中构建布局。