1

オーガナイザー/スケジューラーを模倣する GUI を作成しようとしていますが、ユーザーがタスクを入力するためのフィールドをさらに挿入すると問題が発生します。私のコードでは、フィールドを追加するためのボタンとそれらを送信するためのボタンが指定されていますが、ユーザーがフィールドを追加することを選択した場合、現在のフィールドにのみアクセスできますが、送信時に以前のフィールドにはアクセスできません。以前のフィールドにアクセスするにはどうすればよいですか?

import javax.swing.JTextField;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;  

class Organizer extends JPanel implements ActionListener
{
     protected JTextField dateText,taskText, priorityText;
     Button addField;
     Button submit;
     JPanel panel;
     Vector<String> Dates = new Vector();
     Vector<String> Tasks = new Vector();
     Vector<String> Priority = new Vector();


     public void createWindow()
     {
        JFrame frame = new JFrame ("Organizer");
        panel = new JPanel();
        frame.setVisible(true);
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);

        addField = new Button("(+)");
        addField.addActionListener(this);
        panel.add(addField);

        submit = new Button ("submit");
        submit.addActionListener(this);
        panel.add(submit);

        addFields();
     }

     public void addFields()
     {
        dateText = new JTextField("Enter Date(mon/dd/yyyy)",30);
        taskText = new JTextField("Enter Task",30);
        priorityText = new JTextField("Rate importance(10-high,1-low)",30);

        panel.add(dateText);
        panel.add(taskText);
        panel.add(priorityText);
     }

     public void actionPerformed(ActionEvent evt)
     {
        if(evt.getSource() == addField)
        { 
          addFields();
          panel.revalidate();
          panel.repaint(); 
        }

        if(evt.getSource() == submit)
        {
           String temp = dateText.getText(); 
           System.out.println(temp);

           //Dates.addElement(temp);
           //System.out.println(Dates);
        }
     }

     public static void main (String[] args)
     {
        Organizer Org = new Organizer();
        Org.createWindow();
     }
}
4

2 に答える 2

2

をクリックするたびにJTextFields追加されたのグループを保存する必要があります。また、送信中に同じものを取得できます。これは、コードがどのように見えるべきかの大まかなデモです:JPaneladdField JButtonArrayList

class FieldsGroup //Represents each group of JTextFields
{
    JTextField dateText;
    JTextField taskText;
    JTextField priorityText;
    public FieldsGroup(JTextField dateText,JTextField taskText,JTextField priorityText)
    {
        this.dateText = dateText;
        this.taskText = taskText;
        this.priorityText = priorityText;
    }
    public String getDateText()
    {
        return dateText.getText();
    }
    public String getTaskText()
    {
        return taskText.getText();
    }
    public String getPriorityText()
    {
        return priorityText.getText();
    }
}

次に、Organizerクラス内でArrayList次のようにオブジェクトを作成する必要があります。

     ArrayList<FieldsGroup> groups = new ArrayList<FieldsGroup>();//Create an ArrayList

addFieldsメソッドを次のように変更します。

     public void addFields()
     {
        dateText = new JTextField("Enter Date(mon/dd/yyyy)",30);
        taskText = new JTextField("Enter Task",30);
        priorityText = new JTextField("Rate importance(10-high,1-low)",30);

        panel.add(dateText);
        panel.add(taskText);
        panel.add(priorityText);
        groups.add(new FieldsGroup(dateText,taskText,priorityText));//add each group of JTextFields to ArrayList object groups.
     }

最後に、submitボタンactionPerformedを次のように変更します。

        if(evt.getSource() == submit)
        {
            for (FieldsGroup gr : groups)
            {
                System.out.println(gr.getDateText());
                System.out.println(gr.getTaskText());
                System.out.println(gr.getPriorityText());
                System.out.println("-----------------------------");
            }
       }
于 2013-04-28T18:18:42.467 に答える
0

dateText、taskText、priorityText を含む新しいパネル クラスを抽出し、追加したパネルのリストを維持することをお勧めします。

于 2013-04-28T18:01:12.947 に答える