如何在java中为数组中的项命名?

时间:2014-02-27 21:10:21

标签: java arrays

我创建了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]等,但这不起作用。

谢谢

6 个答案:

答案 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。它允许按键查找值。在您的情况下,键是“名称”,值是整数。