Menambahkan item dan menyegarkan JTable

Jadi, inilah masalahnya - saya ingin menambahkan item jika kelas dalam daftar array, dan setelah mengisi semua pol di kelas saya perlu menyegarkan Jtable, tetapi saya tidak tahu caranya.

ini kode saya: Utama() {

    JFrame frame = new JFrame();
    frame.setSize(550, 450);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new FlowLayout());

    JButton jb1 = new JButton("Добавить");
    JButton jb2 = new JButton("Удалить");
    JButton jb3 = new JButton("Редактировать");
    JButton jb4 = new JButton("Найти мощную машину");


    frame.add(jb1);
    frame.add(jb2);
    frame.add(jb3);

    String[] tbheader = {"ID", "Машина", "Модель", "Цвет", "Мощность", "Объём бака"};
    String[][] tbdata = new String[cdb.size()][6];
    int i = 0;
    for (CarDB temp:cdb){
        tbdata[i][0] = Integer.toString(i + 1);
        tbdata[i][0] = temp.Brand;
        tbdata[i][0] = temp.Model;
        tbdata[i][0] = temp.Color;
        tbdata[i][0] = Short.toString(temp.Power);
        tbdata[i][0] = Short.toString(temp.TankVol);
        i++;
    }

    JTable jt = new JTable(tbdata, tbheader);
    frame.add(new JScrollPane(jt));

    jt.setSize(550, 320);
    jt.setPreferredScrollableViewportSize(jt.getSize());
    jt.setShowHorizontalLines(true);
    jt.setShowVerticalLines(true);

    jb1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            AddCarInList();
            jt.repaint();
        }
    });
    jb2.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            DeleteCarFromList();
        }
    });
    jb3.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            ChooseCarId();
        }
    });
    frame.add(jb4);
    jb4.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            FindPowerfulCar();
        }
    });

    jb2.addActionListener(this);
    jb3.addActionListener(this);
    jb4.addActionListener(this);
    frame.setVisible(true);
    this.cdb = new ArrayList<>();
}

public void AddCarInList() {
    JFrame addCar = new JFrame();
    addCar.setSize(250, 300);
    addCar.setLayout(new FlowLayout());

    JLabel l_br = new JLabel("Введите марку");
    JLabel l_md = new JLabel("Введите модель");
    JLabel l_cl = new JLabel("Введите цвет");
    JLabel l_pw = new JLabel("Введите мощность");
    JLabel l_tv = new JLabel("Введите объём бака");

    JTextField t_br = new JTextField(20);
    JTextField t_md = new JTextField(20);
    JTextField t_cl = new JTextField(20);
    JTextField t_pw = new JTextField(4);
    JTextField t_tv = new JTextField(3);

    JButton conf = new JButton("Добавить");

    addCar.add(l_br);
    addCar.add(t_br);
    addCar.add(l_md);
    addCar.add(t_md);
    addCar.add(l_cl);
    addCar.add(t_cl);
    addCar.add(l_pw);
    addCar.add(t_pw);
    addCar.add(l_tv);
    addCar.add(t_tv);
    addCar.add(conf);
    conf.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (CheckStr(t_br.getText(), t_md.getText(), t_cl.getText())) {
                if (CheckShort(t_pw.getText(), t_tv.getText())) {
                    CarDB car = new CarDB(
                            t_br.getText(),
                            t_md.getText(),
                            t_cl.getText(),
                            Short.parseShort(t_pw.getText()),
                            Short.parseShort(t_tv.getText()));
                    cdb.add(car);
                    System.out.println(cdb.indexOf(car) + 1
                            + " " + cdb.get(0).Brand
                            + " " + cdb.get(0).Model
                            + " " + cdb.get(0).Color
                            + " " + cdb.get(0).Power
                            + " " + cdb.get(0).TankVol);
                    addCar.setVisible(false);
                } else Alert(1);
            } else Alert(3);
        }
    });
    addCar.setVisible(true);
}

Adakah yang tahu cara mengatasi ini?


person genesi5    schedule 25.11.2015    source sumber
comment
Perbarui TableModel JTable, ini akan memicu peristiwa yang sesuai untuk memperbarui JTable dengan tepat. Lihat Cara Menggunakan Tabel untuk detail selengkapnya. Untuk contoh   -  person MadProgrammer    schedule 25.11.2015


Jawaban (2)


Pemrograman berorientasi objek adalah tentang memperluas kelas.
Salah satu kelas yang harus Anda perluas adalah AbstrakTableModel sebagai model ke JTable Anda.
Periksa ini sebagai contoh.
Setelah itu, Anda memperbarui model ini kelas lalu segarkan dengan memanggil:
model.fireTableDataChanged() (perbarui baris) atau
model.fireTableStructureChanged() (perbarui baris + kolom)

person Leet-Falcon    schedule 25.11.2015
comment
Atau gunakan DefaultTableModel yang memiliki sebagian besar fungsi bawaan secara default, namun, hal itu berarti mengetahui format datanya sebelum membuat keputusan lebih lanjut (saya pribadi lebih suka menggunakan AbstractTableModel untuk sebagian besar kasus, tetapi jangan mengabaikan kesederhanaannya dari model bawaan) - person MadProgrammer; 26.11.2015

Bidang cdb adalah daftar mobil. Dalam metode AddCarInList, sebuah mobil ditambahkan ke daftar. Masalahnya adalah daftar ini hanya digunakan sekali untuk menginisialisasi tabel. Seperti yang sudah disarankan oleh MadProgrammer, Anda dapat menyelesaikan masalah ini dengan memperbarui model tabel.

Anda dapat mengubah inisialisasi tabel seperti ini:

Vector<String> columnNames = new Vector<>(Arrays.asList(tbheader));
Vector<Vector<Object>> dataVector = new Vector<>();
tableModel = new DefaultTableModel(dataVector, columnNames);
JTable jt = new JTable(tableModel);

Kode di atas mengasumsikan Anda telah menambahkan kolom tableModel bertipe DefaultTableModel. Dalam metode AddCarInList, Anda bisa menambahkan baris ke model tabel:

final Vector<String> rowVector = new Vector<>();
rowVector.add(t_br.getText());
rowVector.add(t_md.getText());
rowVector.add(t_cl.getText());
rowVector.add(t_pw.getText());
rowVector.add(t_tv.getText());
tableModel.addRow(rowVector);

Menambahkan baris ke model tabel akan secara otomatis menyegarkan tabel.

person Freek de Bruijn    schedule 25.11.2015