
J have two classes, listed below, one is table model, and second show data from database in JTable, and it's OK, but after adding a row into database table does't update. How update JTable after adding a row into database?
package djilepak.javaclss.for_table;
/** Class which creates table model */
import javax.swing.JTable; import javax.swing.table.AbstractTableModel;
public class ModelDataTabele extends AbstractTableModel { private String[] columnNames; private Object[][] data; private boolean edittable, changedata;
public ModelDataTabele(String[] naziviKolona, Object[][] podaci) {
columnNames = naziviKolona;
data = podaci;
edit_table = tedit;
change_data = dchange;
}
public void tableChanged() {
fireTableDataChanged();
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
public void insertRow(int row, Object[] npodaci) {
for(int i = 0; i < npodaci.length; i++) {
data[row][i] = npodaci[i];
}
}
}
// Form which shows data in JTable from database
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableColumn; import javax.swing.event.*; import java.sql.*;
import djilepak.javaclss.for_screen.*; import djilepak.javaclss.for_table.*; import djilepak.javaclss.for_mysql.*;
public class DodajDlg extends JDialog implements ActionListener, FocusListener, KeyListener {
JPanel gornjiPanel = new JPanel();
JPanel centralniPanel = new JPanel();
JPanel donjiPanel = new JPanel();
JScrollPane zaTabelu;
JLabel lblAutor = new JLabel("IME I PREZIME AUTORA: ");
JTextField txtAutor = new JTextField(100);
JButton btnPotvrdi = new JButton("Potrdi");
JButton btnOdustani = new JButton("Odustani");
JTable tabela;
ModelDataTabele mdt;
TableColumn kolona;
ConnectMySQL vezaDB;
Connection Konekcija;
Statement sqlKomanda;
String upit;
ResultSet rs;
String[] nazivi;
Object[][] podaci;
private static int dodajsta;
boolean odustani = false;
static String[] parametri_vb;
int[] wih;
int rb, idna;
String naziva;
public DodajDlg(String naslov, int stasedodaje, String[] parametri_veze) {
dodajsta = stasedodaje;
parametri_vb = parametri_veze;
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle(naslov);
int w = 0, h =0, koeficijent_w = 100, koeficijent_h = 100;
PutFrameTo width_height = new PutFrameTo(w, h);
wih = width_height.Scr_WH();
switch (dodajsta) {
case 1:
case 2:
koeficijent_w = 95;
koeficijent_h = 95;
break;
}
w = (wih[0] / 100) * koeficijent_w;
h = (wih[1] / 100) * koeficijent_h;
setSize(w, h);
PutFrameTo pozicija = new PutFrameTo(w, h);
int[] xiy = pozicija.XY_Pos();
setResizable(false);
setLocation(xiy[0], xiy[1]);
setModal(true);
gornjiPanel.setBackground(Color.lightGray);
switch (dodajsta) {
case 1:
break;
case 2:
this.formaAutor();
break;
}
add(gornjiPanel, BorderLayout.NORTH);
btnPotvrdi.setMnemonic(KeyEvent.VK_P);
btnPotvrdi.setEnabled(false);
btnOdustani.setMnemonic(KeyEvent.VK_O);
btnOdustani.setEnabled(true);
btnPotvrdi.addActionListener(this);
btnPotvrdi.addFocusListener(this);
btnPotvrdi.addKeyListener(this);
btnOdustani.addActionListener(this);
btnOdustani.addFocusListener(this);
btnOdustani.addKeyListener(this);
centralniPanel.setBackground(Color.lightGray);
centralniPanel.add(btnPotvrdi);
centralniPanel.add(btnOdustani);
add(centralniPanel, BorderLayout.CENTER);
napraviTabelu();
donjiPanel.setBackground(Color.darkGray);
zaDonjiPanel();
add(donjiPanel, BorderLayout.SOUTH);
setVisible(true);
}
public void napraviTabelu() {
switch (dodajsta) {
case 1:
break;
case 2:
int sirinaID = (wih[0] / 100) * 10;
int brslogova = brojSlogova();
nazivi = new String[3];
nazivi[0] = "RB";
nazivi[1] = "ID";
nazivi[2] = "Autor";
if (brslogova == 0) {
podaci = new Object[1][3];
podaci[0][0] = 1;
podaci[0][1] = 0;
podaci[0][2] = "";
} else {
podaci = new Object[brslogova][3];
procitajPodatke();
}
mdt = new ModelDataTabele(nazivi, podaci);
tabela = new JTable(mdt);
for (int j = 0; j < tabela.getColumnCount(); j++) {
kolona = tabela.getColumnModel().getColumn(j);
if (j == 0) {
kolona.setPreferredWidth(50);
} else if (j == 1) {
kolona.setPreferredWidth(sirinaID);
} else {
kolona.setPreferredWidth(wih[0] - (sirinaID + 50));
}
}
break;
}
}
private void formaAutor() {
txtAutor.setToolTipText("Upisati IME i PREZIME autora");
txtAutor.addKeyListener(this);
gornjiPanel.add(lblAutor);
gornjiPanel.add(txtAutor);
}
public void actionPerformed(ActionEvent event) {
Object akter = event.getSource();
if (akter == btnOdustani) {
dispose();
}
if (akter == btnPotvrdi) {
pozoviUpis();
napraviTabelu();
}
}
private void zaDonjiPanel() {
int sirina = 0;
int visina = 0;
switch (dodajsta) {
case 1:
break;
case 2:
sirina = (wih[0] / 100) * 93;
visina = (wih[1] / 100) * 75;
break;
}
Font zaglavljeFont = new Font("DialogInput", Font.BOLD, 15);
tabela.getTableHeader().setFont(zaglavljeFont);
zaTabelu = new JScrollPane(tabela);
zaTabelu.setPreferredSize(new Dimension(sirina, visina));
tabela.setFillsViewportHeight(true);
tabela.setSelectionForeground(Color.white);
tabela.setSelectionBackground(Color.blue);
tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
donjiPanel.add(zaTabelu);
}
private int brojSlogova() {
int brojsl = 0;
if (poveziSeSaBazom()) {
switch (dodajsta) {
case 1:
break;
case 2:
try {
sqlKomanda = Konekcija.createStatement();
upit = "select count(*) from autor";
rs = null;
rs = sqlKomanda.executeQuery(upit);
if (rs != null) {
rs.next();
brojsl = rs.getInt(1);
}
rs.close();
sqlKomanda.close();
} catch (SQLException esql) {
String poruka = "Gre\u0161ka: " + esql.toString() + "\n" + esql.getMessage();
JOptionPane.showMessageDialog(null, poruka, "Gre\u0161ka", JOptionPane.WARNING_MESSAGE);
}
vezaDB.prekiniVezuSaBazom(Konekcija);
break;
}
}
return brojsl;
}
private void pozoviUpis() {
if (poveziSeSaBazom()) {
upisiUBazu();
vezaDB.prekiniVezuSaBazom(Konekcija);
}else {
JOptionPane.showMessageDialog(null, "PODACI NISU UPISANI!", "Gre\u0161ka", JOptionPane.WARNING_MESSAGE);
}
}
private boolean poveziSeSaBazom() {
vezaDB = new ConnectMySQL();
Konekcija = vezaDB.konekcijaSaBazom(parametri_vb[0], parametri_vb[1], parametri_vb[2], parametri_vb[3]);
if (Konekcija != null) {
return true;
} else {
return false;
}
}
private void upisiUBazu() {
switch (dodajsta) {
case 1:
break;
case 2:
try {
sqlKomanda = Konekcija.createStatement();
upit = "insert into autor(ida, autor) values(?,?)";
PreparedStatement upisi = Konekcija.prepareStatement(upit);
upisi.setInt(1, 0);
upisi.setString(2, txtAutor.getText());
upisi.executeUpdate();
upisi.close();
sqlKomanda.close();
} catch (SQLException esql) {
String poruka = "Gre\u0161ka: " + esql.toString() + "\n" + esql.getMessage();
JOptionPane.showMessageDialog(null, poruka, "Gre\u0161ka", JOptionPane.WARNING_MESSAGE);
}
txtAutor.setText("");
break;
}
btnPotvrdi.setEnabled(false);
}
private void procitajPodatke() {
if (poveziSeSaBazom()) {
switch (dodajsta) {
case 1:
break;
case 2:
try {
sqlKomanda = Konekcija.createStatement();
upit = "select ida, autor from autor order by autor";
rs = null;
rs = sqlKomanda.executeQuery(upit);
if (rs != null) {
int i = 0;
while (rs.next()) {
podaci[i][0] = i + 1;
podaci[i][1] = rs.getInt("ida");
podaci[i][2] = rs.getString("autor");
i++;
}
}
rs.close();
sqlKomanda.close();
} catch (SQLException esql) {
String poruka = "Gre\u0161ka: " + esql.toString() + "\n" + esql.getMessage();
JOptionPane.showMessageDialog(null, poruka, "Gre\u0161ka", JOptionPane.WARNING_MESSAGE);
}
vezaDB.prekiniVezuSaBazom(Konekcija);
break;
}
}
}
}

Hello Friend,
Try the following code:
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class UpdateJTable extends TimerTask {
private static JTable table = new JTable();
private static Vector columnNames = new Vector();
private static Vector data = new Vector();
private static JFrame f = new JFrame();
private static JScrollPane scrollPane = new JScrollPane();
public static void main(String[] args) {
java.util.Timer timer = new java.util.Timer();
timer.schedule(new UpdateJTable(), 0, 10000);
} public void run() {
remove();
table = draw();
scrollPane.getViewport().add(table, 0);
f.getContentPane().add(scrollPane);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
} public static JTable draw() {
try { Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection( "jdbc:mysql://localhost/test", "root", "root");
String sql = "Select * from employee";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement(md.getColumnName(i)); }
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++) {
row.addElement(rs.getObject(i));
} data.addElement(row);
} rs.close();
stmt.close();
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
table.setModel(new DefaultTableModel(data, columnNames));
TableColumn col;
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
for (int i = 0; i < table.getColumnCount(); i++) {
col = table.getColumnModel().getColumn(i);
col.setMaxWidth(col.getMaxWidth());
} return table;
}
public static void remove() {
columnNames.clear();
if (table.getRowCount() != 0) {
DefaultTableModel dm = (DefaultTableModel) table.getModel();
dm.getDataVector().removeAllElements();
}
}
}
Thanks
If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.
Ask your questions, our development team will try to give answers to your questions.