0

以下のように、2 つの列を持つテーブル モデルに配置される、作成したコンポーネントがあります。

if (!newAcList.isEmpty()) {
    for (Acronym acc : newAcList) {
        tableModel.addRow(new String[]{acc.getName(), acc.getDefinition()});

    }
}

私が必要とするのは、ユーザーがテーブル モデルで項目を選択すると、その項目が頭字語オブジェクトに変換されることです。Listselectionevent リスナーを使用しています。

ここに valueChanged 選択イベントがあります

            @Override
            public void valueChanged(ListSelectionEvent e) {
                String selectedAcData = null;
                String selectDefData = null;

                int[] selectedRow = accTable.getSelectedRows();
                int[] selectedColumns = accTable.getSelectedColumns();

                for (int i = 0; i < selectedRow.length; i++) {
//                    for (int j = 0; j < selectedColumns.length; j++) {
                    selectedAcData = (String) accTable.getValueAt(selectedRow[i], 0);
                }
            }
4

1 に答える 1

1

頭字語の TableModel インターフェイスを実装するクラスを作成することができます。それは呼ばれる可能性があり、頭字語AcronymTableModelのリストによって裏付けられています。List<Acronym>次に、このモデルをテーブルに渡します。

accTable.getValueAt(selectedRow[i], 0);メソッド内で を呼び出すとvalueChanged、頭字語のインスタンスが返されます。

簡単な例を次に示します。

    public class Example {

        public static void main(String [] a) {
            JFrame f = new JFrame();

            JPanel p = new JPanel();

            List<Acronym> acronyms = new ArrayList<Acronym>();
            acronyms.add(new Acronym("FBI", "Federal Bureau of Investigation"));
            acronyms.add(new Acronym("CIA", "Central Intelligence Agency"));

            final TableModel tModel = new AcronymTableModel(acronyms);

            JTable t = new JTable(tModel);
            t.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                @Override
                public void valueChanged(ListSelectionEvent e) {
                    Acronym a = (Acronym)tModel.getValueAt(e.getFirstIndex(), 0);
                    System.out.println(a.acronym + ": " + a.definition);
                }});

            p.add(t);

            f.getContentPane().add(p);

            f.pack();

            f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

            f.setVisible(true);
        }


    }
    class Acronym {
        String acronym;
        String definition;

        public Acronym(String a, String d) {
            acronym = a;
            definition = d;
        }
    }
    class AcronymTableModel implements TableModel {

        private List<Acronym> acronyms;

        public AcronymTableModel(List<Acronym> acs) {
            this.acronyms = new ArrayList<Acronym>(acs);
        }

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

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

        @Override
        public String getColumnName(int columnIndex) {
            switch(columnIndex) {
            case 0:
                return "Acronym";
            case 1:
                return "Definition";
            }

            return null;

        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            return String.class; // Since both columns are simply
        }

        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return acronyms.get(rowIndex);
        }

        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        }

        @Override
        public void addTableModelListener(TableModelListener l) {
        }

        @Override
        public void removeTableModelListener(TableModelListener l) {
        }
    }

Java チュートリアルは常に優れており、優れた例があります。 http://docs.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html

于 2012-09-17T20:09:34.660 に答える