繁体   English   中英

JTable无法从Vector获取数据

[英]JTable not getting data from Vector

我的JTable有一个问题:它似乎是空的,并且没有从我传递给它的对象Vector中获取任何数据。 我检查了相关主题,但可悲的是我没有找到此问题的任何原因,并且几乎相同的代码实际上对我有用一次。 为了进行进一步的测试,我在单击按钮时创建了对象,将其添加到Vector中,然后尝试刷新表。 Printlns显示对象实际上已添加到Vector中,但表仍然为空。 我认为,问题一定在表代码中。 我发布了我的测试课程及相关课程,希望您能为我提供帮助。

测试类:

    public class TEST_Table extends JFrame {

        private PPControl ppc;
        private EntryFilePM epm;

        private JTable entryTable;
        private JPanel entryTablePanel;

        private JButton addButton;
        private JButton saveButton;
        private JButton loadButton;
        private JPanel buttonsPanel;

        private JLabel kursl;
        private JTextField kurst;

        private JLabel cnumberl;
        private JTextField cnumbert;

        private JLabel namel;
        private JTextField namet;

        private JLabel datel;
        private JTextField datet;

        private JLabel addressl;
        private JTextField addresst;

        private JLabel pdatestl;
        private JTextField pdatestt;

        private JLabel pdateendl;
        private JTextField pdateendt;

        private JLabel roadl;
        private JTextField roadt;

        private JLabel studyfl;
        private JTextField studyft;

        private JLabel naprl;
        private JTextField naprt;

        private JLabel ratingl;
        private JTextField ratingt;

        private JLabel averagel;
        private JTextField averaget;

        private JLabel profl;
        private JTextField proft;

        private JLabel pbasel;
        private JTextField pbaset;

        private JLabel homel;
        private JTextField homet;

        private JPanel horriblePanel;

        private JButton saveEntryButton;
        private JButton cancelEntryButton;

        private JPanel entryButtonsPanel;

        private JPanel entryEditPanel;

        int idCounter = 1;


        public static void main(String[] args) throws EntryExistsException {
            try {
                new TEST_Table();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public int getIdCounterNext(){
            return idCounter++;
        }   

        public TEST_Table() throws IOException, EntryExistsException {
            super("TEST");
            ppc = new PPControl();
            initialize();
        }

        private void initialize() {
            setSize(1200,800);
            setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            setLayout(new BorderLayout());
            createEntryTable();
            createButtonsPanel();
            createEntryTab();
            add(entryTablePanel,BorderLayout.CENTER);
            add(entryEditPanel, BorderLayout.WEST);
            add(buttonsPanel, BorderLayout.SOUTH);
            this.setVisible(true);
            this.pack();

        }

        private void createEntryTable() {
            final Vector<String> columns = new Vector<String>();
            columns.add("Std");
            columns.add("Contr #");
            columns.add("Name");

            columns.add("Birth dt");
            columns.add("Address");
            columns.add("Pr date start");

            columns.add("Pr date end");
            columns.add("Road");
            columns.add("Std form");

            columns.add("№ way");
            columns.add("Rating");
            columns.add("Avrg");

            columns.add("Prof");
            columns.add("Pr base");
            columns.add("Home");

            final EntryTableModel entryModel = new EntryTableModel(ppc.giveAllEntry(), columns);
            entryTable = new JTable();
            entryTable.setModel(entryModel);
            entryTable.setShowGrid(true);
    //      entryTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    //      entryTable.getSelectionModel().addListSelectionListener(new TableSelectionListener());
            JScrollPane entryScrollPane = new JScrollPane(entryTable);
            entryTablePanel = new JPanel();
            entryTablePanel.setLayout(new GridLayout());
            entryTablePanel.add(entryScrollPane, BorderLayout.CENTER);
            entryTablePanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
        }

        private void createButtonsPanel() {
            addButton = new JButton("Add");
            saveButton = new JButton("Save");
            saveButton.addActionListener(new ButtonsListener());
            loadButton = new JButton("Load");
            loadButton.addActionListener(new ButtonsListener());

            buttonsPanel = new JPanel();
            buttonsPanel.setLayout(new GridLayout(1, 3));
            buttonsPanel.add(addButton);
            buttonsPanel.add(saveButton);
            buttonsPanel.add(loadButton);

        }

        private void createEntryTab(){
            JLabel kursl = new JLabel ("kurs");
            kurst = new JTextField();

//otherlabels/tfields

            JLabel ratingl = new JLabel("rating.double");
            ratingt = new JTextField();

            JLabel averagel = new JLabel("average.double");
            averaget = new JTextField();

            JLabel profl = new JLabel("profession");
            proft = new JTextField();

            JLabel pbasel = new JLabel("prak.base");
            pbaset = new JTextField();

            JLabel homel = new JLabel("home");
            homet = new JTextField();

            horriblePanel = new JPanel();
            JScrollPane horribleScrollPane = new JScrollPane(horriblePanel);
            horriblePanel.setLayout(new GridLayout(15,2));
    //      horriblePanel.add(horribleScrollPane, BorderLayout.CENTER);
            horriblePanel.add(kursl);
            horriblePanel.add(kurst);

//other labels/tfields
            horriblePanel.add(homel);
            horriblePanel.add(homet);

            saveEntryButton = new JButton("Save");
            saveEntryButton.addActionListener(new ButtonsListener());
            cancelEntryButton = new JButton("Cancel");
            entryButtonsPanel = new JPanel();
            entryButtonsPanel.setLayout(new GridLayout());
            entryButtonsPanel.add(saveEntryButton);
            entryButtonsPanel.add(cancelEntryButton);

            entryEditPanel = new JPanel();
            entryEditPanel.setLayout(new GridLayout());
            entryEditPanel.add(horriblePanel);
            entryEditPanel.add(entryButtonsPanel);

        }

        class TableSelectionListener implements ListSelectionListener {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                int rowIndex = -1;
                if (e.getSource().equals(entryTable.getSelectionModel())
                        && entryTable.getSelectedRow() != -1) {
                    rowIndex = entryTable.convertRowIndexToModel(entryTable
                            .getSelectedRow());
                    EntryTableModel em = (EntryTableModel) entryTable.getModel();
                    Entry entry = em.giveEntryInRow(rowIndex);
                }
            }
        }

        class ButtonsListener implements ActionListener{
            public void actionPerformed(final ActionEvent ae) {
                if(ae.getSource().equals(addButton)){

                }
                if (ae.getSource().equals(saveButton)){
                    try {
                        epm.exportTable(entryTable);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(ae.getSource().equals(loadButton)){
                    try {
                        epm.importTable("C:/test.xls");
                    } catch (BiffException | IOException | ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                if (ae.getSource().equals(saveEntryButton)) {
                    Calendar c = new GregorianCalendar();
                    int studyYear = 23;// Integer.parseInt(kurst.getText());
                    int contractNumber = getIdCounterNext();
                    contractNumber++;// Integer.parseInt(cnumbert.getText());
                    String stname = "Uano";// namet.getText();
                    Date birthDate = c.getTime();
                    // birthDate = epm.convertToDate(datet.getText());

                    String address = "abc asd fg 123";// addresst.getText();
                    Date practiceDateStart = c.getTime();
                    // practiceDateStart = epm.convertToDate(pdatestt.getText());

                    Date practiceDateEnd = c.getTime();
                    // practiceDateEnd = epm.convertToDate(pdateendt.getText());
                    String railway = "bad road";// roadt.getText();
                    String studyForm = "bad form";// studyft.getText();
                    int directionNumber = 1232; // =
                                                // Integer.parseInt(naprt.getText());
                    double rating = 3.4;// Double.parseDouble(ratingt.getText());
                    double average = 4.5;// Double.parseDouble(averaget.getText());
                    String profession = "fcki";// proft.getText();
                    String practiceBase = "fckh";// pbaset.getText();
                    String inhabitation = "fckf2";// homet.getText();
                    try {
                        ppc.addEntry(studyYear, contractNumber, stname, birthDate,
                                address, practiceDateStart, practiceDateEnd, railway,
                                studyForm, directionNumber, rating, average,
                                profession, practiceBase, inhabitation);

                        for (Entry e : ppc.giveAllEntry()) {
                        System.out.println(e.getContractNumber());
                        System.out.println(e.getName());
                        System.out.println(e.getBirthDate());
                    }
                    final EntryTableModel em = (EntryTableModel) entryTable.getModel();
                    System.out.println("a");
                    em.setDataVector(ppc.giveAllEntry());
                    entryTable.updateUI();
                        System.out.println("b");

                    } catch (EntryExistsException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                        }
                }

            }
        }

TableModel类:

public class EntryTableModel extends DefaultTableModel {

    private Vector<Entry> entryList;

    public EntryTableModel(final Vector<Entry> eList, final Vector<String> columnNames) {
        super();
        this.columnIdentifiers = columnNames;
        entryList = (Vector<Entry>) eList;
        this.setDataVector(eList);
    }

    void setDataVector(final Vector<Entry> eList) {
        final Vector<Vector<String>> rows = new Vector<Vector<String>>();
        for (Entry e : eList) {
            final Vector<String> entryAsVector = new Vector<String>();
            entryAsVector.add("" + e.getStudyYear());
            entryAsVector.add("" + e.getContractNumber());
            entryAsVector.add(e.getName());

            entryAsVector.add("" + e.getBirthDate());
            entryAsVector.add(e.getAddress());
            entryAsVector.add("" + e.getPracticeDateStart());

            entryAsVector.add("" + e.getPracticeDateEnd());
            entryAsVector.add(e.getRailway());
            entryAsVector.add(e.getStudyForm());

            entryAsVector.add("" + e.getDirectionNumber());
            entryAsVector.add("" + e.getRating());
            entryAsVector.add("" + e.getAverage());

            entryAsVector.add(e.getProfession());
            entryAsVector.add(e.getPracticeBase());
            entryAsVector.add(e.getInhabitation());
        }
        this.setDataVector(rows, columnIdentifiers);
    }

    public boolean isCellEditable(int row, int column) {
        return false;
    }

    public Entry giveEntryInRow(int row) {
        return entryList.get(row);
    }

给我对象矢量的功能

public class EntryControl {
    private Vector <Entry> entryList = new Vector <Entry> ();
    public void addEntry(Entry e) throws EntryExistsException{
        if (entryList.contains(e))
            throw new EntryExistsException(e, "");
        else
            entryList.add(e);
    }
    public Vector<Entry> listAllEntry(){
        return entryList;
    }
//reference in main control class
    public Vector<Entry> giveAllEntry(){
        return entryControl.listAllEntry();
    }

输出: http : //i57.tinypic.com/125geac.jpg

setDataVector方法中,没有将任何内容添加到rows 您可能要添加以下行:

rows.add(entryAsVector);

如果通过添加打印语句或使用调试器将rows传递给this.setDataVector时检查了rows的值,则可能自己发现了此问题。

TableModel类有点精神分裂症,它扩展了DefaultTableModel,该类已经具有自己的数据核,尽管如此,它却拥有自己的数据核entryList,而忽略了DefaultTableModel父类拥有的数据核。 您需要执行以下两项操作之一:使用您的entryList字段并扩展AbstractTableModel,或者摆脱它,并确保将数据传递到父DefaultTableModel的超级构造函数调用中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM