我有一个小组,最重要的是我连续添加JLabel
和JTextField
。
一切正常。但我的面板的大小非常大,我想从面板的左上角添加这些标签和文本字段。
你能否就此提出任何建议..
List<CPWARackExpData> expList = ...;
for (int i = 0; i < expList.size(); i++) {
JLabel expLabel = expList.get(i).getExpUIComp().getExpLabel();
String sExpName = expList.get(i).getExpName();
if ((sExpName.startsWith(sSubString1) == false))
continue;
sConfigLabelName = sExpName.substring(sSubString1.length(),
sExpName.length());
expLabel.setText(sConfigLabelName);
add(expLabel, getConstraint(new int[] {1, i, 1, 1}));
JTextField expTextField = expList.get(i).getExpUIComp()
.getExpTextField();
expTextField.setPreferredSize(new Dimension(50, 17));
expTextField.setText(expList.get(i).getExpValue());
add(expTextField, getConstraint(new int[] {2, i, 1, 1}));
}
// Create the constraints
private GridBagConstraints getConstraint(int[] c) {
GridBagConstraints g = new GridBagConstraints();
g.gridx = c[0];
g.gridy = c[1];
g.gridwidth = c[2];
g.gridheight = c[3];
g.anchor = GridBagConstraints.FIRST_LINE_START;
g.ipadx = 30;
g.ipady = 15;
return g;
}
答案 0 :(得分:1)
不要将setPreferedSize(...)
用于组件,所有尺寸都必须由LayoutManager
计算。
你可以使用虚拟JLabel
,它可以获取面板下的空格,例如:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class TestFrame extends JFrame {
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
setLayout(new GridBagLayout());
for (int i = 0; i < 5; i++) {
JLabel expLabel = new JLabel(""+i);
String sExpName = "text"+i;
add(expLabel, getConstraint(new int[] {1, i, 1, 1}));
JTextField expTextField = new JTextField();
expTextField.setText(sExpName);
add(expTextField, getConstraint(new int[] {2, i, 1, 1}));
}
GridBagConstraints c = getConstraint(new int[] {1,6,2,1});
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 1;
add(new JLabel(" "),c);
}
private GridBagConstraints getConstraint(int[] c) {
GridBagConstraints g = new GridBagConstraints();
g.gridx = c[0];
g.gridy = c[1];
g.gridwidth = c[2];
g.gridheight = c[3];
g.anchor = GridBagConstraints.FIRST_LINE_START;
g.ipadx = 30;
g.ipady = 15;
return g;
}
public static void main(String args[]) {
new TestFrame();
}
}
或在面板中使用LayoutManager的组合,更改下一个init方法:
private void init() {
JPanel p = new JPanel();
p.setLayout(new GridBagLayout());
for (int i = 0; i < 5; i++) {
JLabel expLabel = new JLabel(""+i);
String sExpName = "text"+i;
p.add(expLabel, getConstraint(new int[] {1, i, 1, 1}));
JTextField expTextField = new JTextField();
expTextField.setText(sExpName);
p.add(expTextField, getConstraint(new int[] {2, i, 1, 1}));
}
JPanel dummyPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
dummyPanel.add(p);
add(dummyPanel,BorderLayout.PAGE_START);
}