0

私は長い間、この問題に対していくつかの愚かな解決策を作成している間、次のことを適切に行う方法について疑問に思っていました。

DataTable:ID | 名| 姓| 住所| データ ...

すべての名と姓をリストボックスに表示し、1つの項目を選択すると、対応するデータセットの残りを取得したいのですが、一部のテキストボックスに表示されます。

だから私は基本的にします:

1)クエリ:SELECT ID、givenname、lastname FROM DataTable;

2)「ContactObjects」(DataTableに列があるのと同じメンバーを持つクラスのみ)のArrayListを作成し、結果セットを反復処理して、ID、givenname、lastnameを使用してこれらのオブジェクトをいくつか作成します。

!3)リストボックスにgivenname + "" + lastnameを表示したいのですが、 "John Doe"を選択すると、プログラムにこの "john Doe"が配列リストのどの要素であったかを認識させたいです(複数ある場合)それら)、オブジェクトからIDを削除し、彼のアドレスと「データ」を削除します

私がよくやったことは、「リストボックスの3番目のJohn Doeが選択されたので、配列リストで3番目のJohn Doeを探して、これが正しいことを神に願う」というようなものでした。

Java+Swingでこれに使用できるソリューションは何ですか

何とかして必要なものを明確にできたらいいのにと思います^^

ビルドアに関して

4

3 に答える 3

3

オブジェクトを表示するために、Swing コンポーネントはオブジェクトが配置された toString() メソッドを使用します。一般的なアプローチは、名前、ID などを保持する Data クラスを作成し、必要なものを表示するために toString() を実装してから、これらのオブジェクトのリストを JList に入れることです。次に、選択時に、選択した項目を取得し、それをデータ クラスにキャストしてから、getID() を呼び出します。

于 2013-03-22T16:39:51.903 に答える
1

データを保持するテーブル モデルを作成し、必要に応じてレンダラーを作成して正しく表示する必要があります。詳細については、テーブルの使用方法を参照してください。次に、テーブルの選択リスナーで、関連する行を取得できます。ヘルパー メソッドを使用TableModel.getValueAt()または追加して、選択したデータを取得できます。以下は、ユーザーモデルの簡単な例です。アプリは、テーブルに表示されていない ID を含む選択されたユーザーを出力します。getUser()モデルには、特定の行でユーザーを取得するための便利なメソッドがあります。DefaultTableModelこのように単純なシナリオにも使用できることに注意してください。

import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.AbstractTableModel;

public class UserTableDemo {

    public UserTableDemo() {
        JFrame frame = new JFrame("UserTable");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final UserModel model = new UserModel();
        final JTable table = new JTable();
        table.setModel(model);
        JScrollPane scrollPane = new JScrollPane(table);
        JPanel content = new JPanel(new BorderLayout());
        content.add(scrollPane, BorderLayout.CENTER);
        final JTextArea output = new JTextArea(5, 30);
        content.add(output, BorderLayout.SOUTH);

        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.getSelectionModel().addListSelectionListener(
                new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent e) {
                        if (!e.getValueIsAdjusting()) {
                            UserEntry entry = model.getUser(table
                                    .getSelectedRow());
                            if (entry != null) {
                                output.setText("Selected row:"
                                        + table.getSelectedRow() + " "
                                        + entry.toString());
                            } else {
                                output.setText("");
                            }
                        }
                    }
                });

        frame.add(content);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public class UserModel extends AbstractTableModel {

        private static final long serialVersionUID = 1L;
        private List<UserEntry> users = new ArrayList<UserEntry>();

        public UserModel() {
            //TODO - load users
            users.add(new UserEntry(3, "John", "Doe"));
            users.add(new UserEntry(2, "John", "Doe"));
            users.add(new UserEntry(1, "John", "Doe"));
        }

        public UserEntry getUser(int row) {
            if(row >= 0 && row < users.size())
                return users.get(row);
            return null;
        }

        @Override
        public int getRowCount() {
            return users.size();
        }

        @Override
        public int getColumnCount() {
            return 2;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            UserEntry entry = users.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return entry.getFirstName();
                case 1:
                    return entry.getLastName();
            }
            return null;
        }

        @Override
        public String getColumnName(int column) {
            switch (column) {
                case 0:
                    return "First Name";
                case 1:
                    return "Last Name";
            }
            return null;
        }
    }

    public class UserEntry {
        private int id;
        private String firstName;
        private String lastName;

        public UserEntry(int id, String firstName, String lastName) {
            super();
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public int getId() {
            return id;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        @Override
        public String toString() {
            return "UserEntry [id=" + id + ", firstName=" + firstName
                    + ", lastName=" + lastName + "]";
        }
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new UserTableDemo();
            }
        });
    }
}

JListの代わりに使用している場合も、同じプロセスになりますJTable

編集:

JListwithDefaultListModelとカスタム レンダラーを使用してユーザーのリストを表示する同様の例を次に示します。

import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.*;
import javax.swing.event.*;

public class UserListDemo {
    public UserListDemo() {
        JFrame frame = new JFrame("User List");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final JList list = new JList();

        JScrollPane scrollPane = new JScrollPane(list);
        JPanel content = new JPanel(new BorderLayout());
        content.add(scrollPane, BorderLayout.CENTER);
        final JTextArea output = new JTextArea(5, 40);
        content.add(output, BorderLayout.SOUTH);
        final DefaultListModel model = new DefaultListModel();
        model.addElement(new UserEntry(3, "John", "Doe"));
        model.addElement(new UserEntry(1, "John", "Doe"));
        model.addElement(new UserEntry(3, "John", "Doe"));
        list.setModel(model);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        list.setCellRenderer(new DefaultListCellRenderer() {
            @Override
            public Component getListCellRendererComponent(JList list,
                    Object value, int index, boolean isSelected,
                    boolean hasFocus) {
                if (value instanceof UserEntry) {
                    return super.getListCellRendererComponent(list,
                            ((UserEntry) value).getFirstName() + " "
                                    + ((UserEntry) value).getLastName(), index,
                            isSelected, hasFocus);
                }
                return super.getListCellRendererComponent(list, value, index,
                        isSelected, hasFocus);
            }
        });

        list.getSelectionModel().addListSelectionListener(
                new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent e) {
                        if (!e.getValueIsAdjusting()) {
                            UserEntry entry = (UserEntry) list
                                    .getSelectedValue();
                            if (entry != null) {
                                output.setText("Selected row:"
                                        + list.getSelectedIndex() + " "
                                        + entry.toString());
                            } else {
                                output.setText("");
                            }
                        }
                    }
                });

        frame.add(content);
        frame.setLocationByPlatform(true);
        frame.pack();
        frame.setVisible(true);
    }

    public class UserEntry {
        private int id;
        private String firstName;
        private String lastName;

        public UserEntry(int id, String firstName, String lastName) {
            super();
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public int getId() {
            return id;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        @Override
        public String toString() {
            return "UserEntry [id=" + id + ", firstName=" + firstName
                    + ", lastName=" + lastName + "]";
        }
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new UserListDemo();
            }
        });
    }
}
于 2013-03-22T16:22:31.830 に答える