Поэтому я пытаюсь создать большое количество JTextField и использовать их в качестве узлов в программе двоичного дерева, которую я пытаюсь создать. Есть ли способ создать массив JTextFields, например:

JTextField nodes[]=new JTextField[30];

Если да, как мне определить или дать каждому из них разные свойства или свойство, которое я хочу, чтобы они имели?

Благодарность!

-1
Curious One 5 Янв 2016 в 14:56

3 ответа

Лучший ответ
JTextField[] fields = new JTextField[30];
for(int i = 0; i<fields.length; i++){
    fields = new JTextField();
}

//then you can access them and modify them as normal.
fields[3].setColumns(5);
fields[3].setText("apples");
2
matt 5 Янв 2016 в 13:28

Ты можешь это сделать:

JTextField[] jtfs = new JTextFields[] {
    // Define as many textfields as you want
    new JTextField(), // no args
    new JTextField("Initial text"), // text
    new JTextField(20), // 20 columns
    new JTextField("Initial text", 20), // text + columns number
    ...
}
1
Mohammed Aouf Zouag 5 Янв 2016 в 12:02

Вы можете перебрать все ваши JTextField, взяв это в качестве примера, вы можете добавить switch внутри цикла for, чтобы поместить в каждый case свойства каждого JTextField.

Из ваших комментариев к другим ответам я увидел, что вы хотели field[3] (или любое другое имя) изменить номер столбца и написать внутри него «Apple».

В следующий раз вам следует предоставить пример выполнения в качестве того, что я предлагаю, чтобы мы могли скопировать и вставить его и дать вам лучший подход. . И (по желанию) изображение того, что вы хотите.

Здесь я использовал только 5 JTextFields для примера, вы можете получить 30, которые хотите, попробуйте :)

Приведенный ниже код дает такой результат:

enter image description here

import java.awt.*;
import javax.swing.*;
public class ArrayOfJTextField {
    JFrame frame;
    JPanel pane;
    JTextField fields[];
    ArrayOfJTextField () {
        frame = new JFrame("Frame Test");
        fields = new JTextField[5];
        Container pane2 = frame.getContentPane();
        pane2.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

        for(int i = 0; i < fields.length; i++) {
            pane = new JPanel(new FlowLayout());
            fields[i] = new JTextField ("This is field " + (i + 1)); //You missed to do this and that's why you were getting a NPE
            if (i == 3) {
                fields[i].setColumns(10);
                fields[i].setText("Apple");
            } else {
                fields[i].setColumns(5);
            }
            pane.add(new JLabel("Label " + (i +1)));
            pane.add(fields[i]);
            frame.add(pane);
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main (String args[]) {
        new ArrayOfJTextField();
    }
}
0
Community 23 Май 2017 в 12:15