0

columnsArray []という名前の配列があり、6つの文字列を含むように事前定義されています。メソッドcolumns()を実行すると、columnsArray []が、ユーザーがチェックボックスをオンにして選択した文字列の新しい配列で上書きされるはずです。私がこれを実装しようとした方法では、チェックされた各ボックスがarrayListに追加され、arrayListがarray[]に変換されます。ただし、コードを実行しても、columnsArrayは上書きされません。

これまでの私のコードは次のとおりです。

public class EditView {
    private JFrame frame;
    JCheckBox appNo, name, program, date, pName, country, fileLoc, email, uni,
            countryUni, degree, classification, funding, supervisor,
            rejectedBy, misc;
    public ArrayList<String> columnArrLst;
    public String[] columnsArray = { "Application Number", "Name", "Program",
            "Date", "Project Name", "Country of Uni" };

    public EditView() {

    }

    public void makeFrame() {
        frame = new JFrame("Edit View");
        frame.setPreferredSize(new Dimension(300, 350));
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new GridLayout(0, 2, 20, 20));

        appNo = new JCheckBox("appNo");
        name = new JCheckBox("Name");
        program = new JCheckBox("Program");
        date = new JCheckBox("Date");
        pName = new JCheckBox("Project Title");
        country = new JCheckBox("Country of Origin");
        fileLoc = new JCheckBox("Current File Location");
        // countryRef = new JCheckBox("");
        email = new JCheckBox("Email address");
        uni = new JCheckBox("Last University");
        countryUni = new JCheckBox("Country of last Uni");
        degree = new JCheckBox("Degree");
        classification = new JCheckBox("Degree Classification");
        funding = new JCheckBox("funding");
        supervisor = new JCheckBox("Supervisor");
        rejectedBy = new JCheckBox("Rejected By");
        misc = new JCheckBox("Miscelaneous");
        contentPane.add(appNo);
        contentPane.add(name);
        contentPane.add(program);
        contentPane.add(date);
        contentPane.add(pName);
        contentPane.add(country);
        contentPane.add(fileLoc);
        contentPane.add(email);
        contentPane.add(uni);
        contentPane.add(countryUni);
        contentPane.add(degree);
        contentPane.add(classification);
        contentPane.add(supervisor);
        contentPane.add(rejectedBy);
        contentPane.add(misc);

        JButton changeView = new JButton("Change View");

        changeView.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                columns();
                frame.dispose();
            }
        });

        contentPane.add(changeView);
        frame.pack();
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

    public String[] columns() {
        columnArrLst = new ArrayList<String>();
        if (appNo.isSelected()) {
            columnArrLst.add("AppNo");
        }
        if (name.isSelected()) {
            columnArrLst.add("Name");
        }
        if (date.isSelected()) {
            columnArrLst.add("Date");
        }
        if (fileLoc.isSelected()) {
            columnArrLst.add("file Location");
        }
        if (country.isSelected()) {
            columnArrLst.add("Country");
        }
        if (email.isSelected()) {
            columnArrLst.add("Email");
        }
        if (uni.isSelected()) {
            columnArrLst.add("University");
        }
        if (countryUni.isSelected()) {
            columnArrLst.add("Country of Uni");
        }
        if (degree.isSelected()) {
            columnArrLst.add("Degree");
        }
        if (classification.isSelected()) {
            columnArrLst.add("Degree Classification");
        }
        if (pName.isSelected()) {
            columnArrLst.add("ProjectName");
        }
        if (funding.isSelected()) {
            columnArrLst.add("Funding");
        }
        if (supervisor.isSelected()) {
            columnArrLst.add("Supervisor");
        }
        if (rejectedBy.isSelected()) {
            columnArrLst.add("rejected By");
        }
        if (misc.isSelected()) {
            columnArrLst.add("Miscelaneous");
        }
        columnsArray = new String[columnArrLst.size()];
        columnArrLst.toArray(columnsArray);
        return columnsArray;
    }
}

上書きしない理由はありますか?助けてくれてありがとう。

4

3 に答える 3

3

これを試してみてください

columnsArray =  columnArrLst.toArray(new String[columnArrLst.size()]);

それが役に立てば幸い。

于 2013-03-21T12:30:44.253 に答える
1

コードに問題はありません。配列の内容は、次のように使用すると実際に変化します

EditView e = new EditView();
e.makeFrame();

後に印刷ループを挿入します

columnArrLst.toArray(columnsArray);

JFrame は別のスレッドに表示されることに注意してください。値を確認したい場合は、ボタンが押されて値が変更されるまで明示的に待機する必要があります。次のようなことをしている場合:

EditView e = new EditView();
e.makeFrame();
for (String s : e.columnsArray) { System.out.println(s);}

印刷スレッドは実際には別のものであり、値をすぐに印刷するため、これは古い値を印刷します。

于 2013-03-21T12:35:49.803 に答える
1

最後の 2 行目 [columnArrLst.toArray(columnsArray);] を次のように置き換えます。

columnsArray = columnArrLst.toArray(columnsArray);

于 2013-03-21T12:33:45.530 に答える