Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将表格模型上的选定项转换为对象_Java_Jtable_Tablemodel - Fatal编程技术网

Java 将表格模型上的选定项转换为对象

Java 将表格模型上的选定项转换为对象,java,jtable,tablemodel,Java,Jtable,Tablemodel,我创建了一些组件,它们被放入一个表模型中,表模型中有两列,如下所示 if (!newAcList.isEmpty()) { for (Acronym acc : newAcList) { tableModel.addRow(new String[]{acc.getName(), acc.getDefinition()}); } } 我需要的是,当用户在表模型上选择一个项时,它会将该项转换回我的首字母缩略词对象。我正在使用Listselectionevent侦听

我创建了一些组件,它们被放入一个表模型中,表模型中有两列,如下所示

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);
                }
            }
@覆盖
public void值已更改(ListSelectionEvent e){
选择的字符串CDATA=null;
字符串selectDefData=null;
int[]selectedRow=accTable.getSelectedRows();
int[]selectedColumns=accTable.getSelectedColumns();
for(int i=0;i
您可能希望创建一个类,该类实现首字母缩略词的TableModel接口。它可能被称为
首字母缩略词TableModel
,并由
列表支持。为什么要转换它?您是否尝试过向表中添加侦听器以获取所选索引并根据所选索引引用模型?我有一个listselectionevent侦听器。我使用SelectedCDATA=(字符串)jtable.getValueAt(selectedRow[I],0);请看,当我创建表格模型时,我使用了字符串值,但我无法将其转换回首字母缩写OBJECT。我想我在这里假设的太多了。我假设表格是一个包含首字母缩写词的表格。两列。一列表示单词本身,另一列表示首字母缩写词。实际上,第一列是首字母缩写词,它是一个字符串第二个是一个明显是字符串的句子。但是你能给我一个Acc表格模型类的例子吗。@马克,我发布了一个例子。我在这里制作了表格模型的最终版本只是为了这个例子。谢谢我现在正在做这件事。我非常感谢你在这方面的帮助。
    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) {
        }
    }