我创建了JFields数组;
JFields[] field = new JField[5];
for(int j = 0; i < 5; i++) {
field[j] = new JField();
}
我想要做的是给数组中的每个项目命名,例如,field1,field2,field3,field4,field5。
我尝试完成这样的事情;
String[] field = {field1, field2, field3, field4, field5}
也试过这样做;
field[j] = {field1, field2, field3, field4, field5}
但是没有工作。有人能告诉我怎么做,谢谢。
另外,如何从该数组中调用单个项目
我尝试过例如field[0] OR field[1]
等,但这不起作用。
谢谢
答案 0 :(得分:4)
这就是你的阵列的用途。因为你有一个名为fields的JTextField数组,你已经为数组中的项目提供了“名称”,例如field [2]和field [3],所以这里不需要给变量“names”。
你说:
我尝试了例如field [0] OR field [1]等,但这不起作用。
然后你做错了什么,但没有告诉我们什么。请扩展“无效”的含义,包括向我们展示您尝试使用field[0]
或field[1]
的方式以及您可能获得的错误或例外,我们将能够提供你是一个更完整的答案。
我猜你有一个范围问题,也许你的数组是在方法或构造函数块中声明的,或者是某些其他循环或控制结构块使得它在你尝试使用它时不可见,但我无法确定。更多代码将帮助我们更多地告诉您。
修改强>
例如:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;
@SuppressWarnings("serial")
public class TextFieldFun extends JPanel {
public static final int TEXT_FIELD_COUNT = 8;
private static final int COLS = 10;
// array of JTextFields
private JTextField[] fields = new JTextField[TEXT_FIELD_COUNT];
// JTextField used to enter text to go into one of the array item fields
private JTextField enterField = new JTextField(COLS);
// spinner to choose which fields item to have its text set
private JSpinner fieldIndexSpinner = new JSpinner(new SpinnerNumberModel(0, 0, TEXT_FIELD_COUNT - 1, 1));
public TextFieldFun() {
// JPanel to hold the array of fields
JPanel textFieldPanel = new JPanel(new GridLayout(0, 1));
for (int i = 0; i < fields.length; i++) {
// create field items for array
fields[i] = new JTextField(COLS);
fields[i].setEditable(false);
fields[i].setFocusable(false);
JPanel rowPanel = new JPanel();
rowPanel.add(new JLabel("Field " + i + ":"));
rowPanel.add(fields[i]); // and put into a JPanel
textFieldPanel.add(rowPanel); // put JPanel into grid layout using JPanel
}
EnterAction enterAction = new EnterAction();
enterField.setAction(enterAction);
JPanel bottomPanel = new JPanel();
bottomPanel.add(new JLabel("Row to Change:"));
bottomPanel.add(fieldIndexSpinner);
bottomPanel.add(new JLabel("Text:"));
bottomPanel.add(enterField);
bottomPanel.add(new JButton(enterAction));
setLayout(new BorderLayout());
add(textFieldPanel, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.SOUTH);
}
private class EnterAction extends AbstractAction {
public EnterAction() {
super("Enter");
}
@Override
public void actionPerformed(ActionEvent e) {
// get the text from the enterField JTextField
String text = enterField.getText();
// get the int from the JSpinner
int index = ((Integer)fieldIndexSpinner.getValue()).intValue();
// set the JTextField in the array whose index matches that of the spinner value
fields[index].setText(text);
}
}
private static void createAndShowGui() {
TextFieldFun mainPanel = new TextFieldFun();
JFrame frame = new JFrame("TextFieldFun");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
答案 1 :(得分:1)
如果您必须按照名称引用它们,请使用HashMap。
HashMap<String, JField> fieldNameMap = new HashMap<String, JField>();
fieldNameMap.put("field1", field[j]);
//repeat ad nauseum
//when you want to retrieve one
JField myField = fieldNameMap.get("field1");
答案 2 :(得分:1)
你要问的内容并没有多大意义,除非你想要做的是使用每个单独的Field实例,而不是在数组中引用它。上面推荐的Map解决方案可以正常工作,就像单独实例化每个Field并将其分配给变量一样。
JField field1 = new JField();
JField field2 = new JField();
JField field3 = new JField();
JField field4 = new JField();
JField field5 = new JField();
JFields[] fields = { field1, field2, field3, field4, field5 };
// The following 2 statements reference the same JField instance.
System.out.println( field5.toString() );
System.out.println( fields[ 4 ].toString() );
地图对我来说更有意义,但是空检查步骤是一个痛苦的屁股(我想你也应该是空检查数组解决方案......我会把它留给读者)。
Map<String,JField> fields = new HashMap<String,JField>();
for( int i = 0; i < 5; i++ ) {
String key = "field" + ( i + 1 );
JField value = new JField();
fields.put( key, value );
}
JField field = fields.get( "field5" );
if ( field != null ) {
System.out.println( field.toString() );
}
答案 3 :(得分:1)
使用索引(即fields[0], fields[1]
等)来访问数组。
如果您真的需要您的结构能够通过名称访问您的项目,那么您需要将数据结构从数组更改为地图。我建议使用HashMap。
您可以将数组导入HashMap,如下所示:
HashMap<String,JField> map = new HashMap<String,JField>();
for (int i = 0; i < field.length; i++ ){
map.put("field"+i ,field[i]);
}
现在您可以按名称访问JField:
map.get("field1")
答案 4 :(得分:0)
您不能明确地向数组提供名称。你要找的是Map
答案 5 :(得分:0)
您需要的是Map。它允许按键查找值。在您的情况下,键是“名称”,值是整数。