Java setValue(aValue==null?null:aValue.toString()); fireTableCellUpdated(行索引、列索引); 打破 } } } }

Java setValue(aValue==null?null:aValue.toString()); fireTableCellUpdated(行索引、列索引); 打破 } } } },java,swing,user-interface,jtextfield,jlist,Java,Swing,User Interface,Jtextfield,Jlist,查看更多详细信息您不能这样做JList不是一个容器,而是一个组件,因此它不能容纳组件。为什么你(认为你)需要一个JList?为什么不使用JPanel?我真的不知道如何开始。好的,这是逻辑。但我必须创建一个列表,对吗?每次按下按钮时添加字段。还有一个删除按钮,可以删除一些行。最好使用一个有两列的JTable,第一列不可编辑哇,非常好!非常感谢。您能告诉我如何在表格单元格中添加图标吗?在第三列中。当然,从检查开始 import java.awt.BorderLayout; import java.a

查看更多详细信息

您不能这样做
JList
不是一个容器,而是一个组件,因此它不能容纳组件。为什么你(认为你)需要一个JList?为什么不使用
JPanel
?我真的不知道如何开始。好的,这是逻辑。但我必须创建一个列表,对吗?每次按下按钮时添加字段。还有一个删除按钮,可以删除一些行。最好使用一个有两列的JTable,第一列不可编辑哇,非常好!非常感谢。您能告诉我如何在表格单元格中添加图标吗?在第三列中。当然,从检查开始
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.AbstractTableModel;

public class TestTable04 {

    public static void main(String[] args) {
        new TestTable04();
    }

    private int id = 0;

    public TestTable04() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                final RecordTableModel model = new RecordTableModel();
                JTable table = new JTable(model);

                JButton add = new JButton("Add");
                add.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        model.add(new Record(++id));
                    }
                });

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(add, BorderLayout.SOUTH);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class Record {

        private int id;
        private String value;

        public Record(int id) {
            this.id = id;
        }

        public int getID() {
            return id;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }

    }

    public class RecordTableModel extends AbstractTableModel {

        private List<Record> lstRecords;

        public RecordTableModel() {
            lstRecords = new ArrayList<>(24);
        }

        public void add(Record record) {
            lstRecords.add(record);
            fireTableRowsInserted(lstRecords.size() - 1, lstRecords.size() - 1);
        }

        public void remove(Record record) {
            if (lstRecords.contains(record)) {
                int index = lstRecords.indexOf(record);
                remove(index);
            }
        }

        public void remove(int index) {
            lstRecords.remove(index);
            fireTableRowsDeleted(index, index);
        }

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

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

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            Class clazz = String.class;
            switch (columnIndex) {
                case 0:
                    clazz = Integer.class;
                    break;
            }
            return clazz;
        }

        @Override
        public String getColumnName(int column) {
            String name = null;
            switch (column) {
                case 0:
                    name = "ID";
                    break;
                case 1:
                    name = "Value";
                    break;
            }
            return name;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            Record record = lstRecords.get(rowIndex);
            Object value = null;
            switch (columnIndex) {
                case 0:
                    value = record.getID();
                    break;
                case 1:
                    value = record.getValue();
                    break;
            }
            return value;
        }

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

        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            Record record = lstRecords.get(rowIndex);
            switch (columnIndex) {
                case 1:
                    record.setValue(aValue == null ? null : aValue.toString());
                    fireTableCellUpdated(rowIndex, columnIndex);
                    break;
            }
        }
    }
}