使用 JLabels 填充数组
Populating an array with JLabels
我的 JLabel 和 JTextFields 有这段代码。我想知道是否 - 为了保存 space - 我可以以某种方式将我的 JLabels and/or JTextFields 添加到数组中吗?我有比下面这些更多的 JLabel 和 JTextFields。
JLabel lblVundet = new JLabel("Won");
lblVundet.setBounds(5, 10, 50, 16);
mainframe.add(lblVundet);
JLabel lblUafgjort = new JLabel("Draw");
lblUafgjort.setBounds(5, 55, 60, 16);
mainframe.add(lblUafgjort);
JLabel lblTabt = new JLabel("Lost");
lblTabt.setBounds(5, 100, 60, 16);
mainframe.add(lblTabt);
txtFieldWon = new JTextField();
txtFieldWon.setBounds(168, 4, 134, 28);
mainframe.add(txtFieldWon);
txtFieldWon.setColumns(10);
txtFieldDraw = new JTextField();
txtFieldDraw.setBounds(168, 49, 134, 28);
mainframe.add(txtFieldDraw);
txtFieldDraw.setColumns(10);
txtFieldLost = new JTextField();
txtFieldLost.setBounds(168, 94, 134, 28);
mainframe.add(txtFieldLost);
txtFieldLost.setColumns(10);
如果你只想将它们存储在数组中,我建议使用 ArrayList:
ArrayList<JLabel> allJLabels = new ArrayList<JLabel>();
ArrayList<JTextField> allJTextFields = new ArrayList<JTextFields>();
如果这就是你想要的。如果您对所有 labels/textfields 具有相同的值,这只会节省 space。但我认为所有标签都不会具有相同的文本。
为此,我将创建您自己的方法:
private JLabel createLabel(String text, int b1, int b2, int b3, int b4)
{
JLabel l = new JLabel(text);
l.setBounds(b1, b2, b3, b4);
return l;
}
那么就只有一行:
allJLabels.add(createLabel("Won", 5, 10, 50, 16));
然后将它们添加到主机(按照添加项目的顺序):
for(int i = 0; i < allJLabels.size(); ++i)
{
mainframe.add(allJLabels.get(i));
}
您可以只创建 for 循环并减少代码中的冗余。如果您将下面的代码分成两种不同的方法并调用它们以减少重复,那就太好了。
如果您真的需要(尽管我认为没有任何必要),您可以将 labels/fields 存储到数组中,因为您手边有许多标签和字段。
String labels[] = {"Won", "Draw", "Lost"};
JLabel label;
for (int i =0; i<labels.length; i++) {
label = new JLabel(labels[i]);
label.setBounds(5, 10 + (i * 45), 50, 16);
mainframe.add(label);
}
JTextField jTextField;
int txtFieldCount = 3;
for (int i=0 ;i<txtFieldCount; i++) {
jTextField = new JTextField();
jTextField.setBounds(168, 4 + (i * 45), 134, 28);
mainframe.add(jTextField);
jTextField.setColumns(10);
}
我的 JLabel 和 JTextFields 有这段代码。我想知道是否 - 为了保存 space - 我可以以某种方式将我的 JLabels and/or JTextFields 添加到数组中吗?我有比下面这些更多的 JLabel 和 JTextFields。
JLabel lblVundet = new JLabel("Won");
lblVundet.setBounds(5, 10, 50, 16);
mainframe.add(lblVundet);
JLabel lblUafgjort = new JLabel("Draw");
lblUafgjort.setBounds(5, 55, 60, 16);
mainframe.add(lblUafgjort);
JLabel lblTabt = new JLabel("Lost");
lblTabt.setBounds(5, 100, 60, 16);
mainframe.add(lblTabt);
txtFieldWon = new JTextField();
txtFieldWon.setBounds(168, 4, 134, 28);
mainframe.add(txtFieldWon);
txtFieldWon.setColumns(10);
txtFieldDraw = new JTextField();
txtFieldDraw.setBounds(168, 49, 134, 28);
mainframe.add(txtFieldDraw);
txtFieldDraw.setColumns(10);
txtFieldLost = new JTextField();
txtFieldLost.setBounds(168, 94, 134, 28);
mainframe.add(txtFieldLost);
txtFieldLost.setColumns(10);
如果你只想将它们存储在数组中,我建议使用 ArrayList:
ArrayList<JLabel> allJLabels = new ArrayList<JLabel>();
ArrayList<JTextField> allJTextFields = new ArrayList<JTextFields>();
如果这就是你想要的。如果您对所有 labels/textfields 具有相同的值,这只会节省 space。但我认为所有标签都不会具有相同的文本。 为此,我将创建您自己的方法:
private JLabel createLabel(String text, int b1, int b2, int b3, int b4)
{
JLabel l = new JLabel(text);
l.setBounds(b1, b2, b3, b4);
return l;
}
那么就只有一行:
allJLabels.add(createLabel("Won", 5, 10, 50, 16));
然后将它们添加到主机(按照添加项目的顺序):
for(int i = 0; i < allJLabels.size(); ++i)
{
mainframe.add(allJLabels.get(i));
}
您可以只创建 for 循环并减少代码中的冗余。如果您将下面的代码分成两种不同的方法并调用它们以减少重复,那就太好了。
如果您真的需要(尽管我认为没有任何必要),您可以将 labels/fields 存储到数组中,因为您手边有许多标签和字段。
String labels[] = {"Won", "Draw", "Lost"};
JLabel label;
for (int i =0; i<labels.length; i++) {
label = new JLabel(labels[i]);
label.setBounds(5, 10 + (i * 45), 50, 16);
mainframe.add(label);
}
JTextField jTextField;
int txtFieldCount = 3;
for (int i=0 ;i<txtFieldCount; i++) {
jTextField = new JTextField();
jTextField.setBounds(168, 4 + (i * 45), 134, 28);
mainframe.add(jTextField);
jTextField.setColumns(10);
}