Witam
Mam drobny problem techniczny związany z klasa Schedule oraz z mechanizmem aktualizacji wybranego wiersza oraz komórki w tabeli.
Na obecną chwile schemat ma byc taki iż tabeli ma przykładowe wpisy i za pomocą Schedula automatycznie co 5 sek ma robić update np 1 kom 1 wiersz tabeli, ale z jakieś przyczyny tego nie robi.
Testowałem różne scenariusze. Samo drukowanie w konsoli napisu czasowo działa. Wyłączając Schedule z pod przycisku robi to bez problemu więc tak myślę może kwestia dołączyć do obiektu opcje zdarzenia (actionListener).
CODE:
package update_data_in_rows_and_cells_testing;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import update_data_in_rows_and_cells_testing.TaskToExecute;
public class PopulateTableRecordsundUpdate extends JFrame{
JPanel contentPane;
JTable tab;
public JTextField field;
public JTextField textField;
public JTextField textField_1;
public JTextField textField_2;
public JButton update;
public DefaultTableModel model2 = new DefaultTableModel();
//Wyswietlenie tabeli oraz wyplenienie danymi
public void populateTable()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
//contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
//Tworzenie komorek tabeli
DefaultTableModel dm = new DefaultTableModel();
dm.addColumn("Name");
dm.addColumn("Surname");
dm.addColumn("Age");
dm.addColumn("Nation");
JTable tab = new JTable(dm);
tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
contentPane.add(tab);
JScrollPane scroll = new JScrollPane(tab);
scroll.setPreferredSize(new Dimension(320,120));
contentPane.add(scroll);
//Wypelnienie komorek tabeli danymi
String[] name = {"William","Defoe","50","American"};
dm.addRow(name);
String[] name2 = {"George","Cloney","40","American"};
dm.addRow(name2);
String[] name3 = {"Javier","Bardem","45","Spain"};
dm.addRow(name3);
String[] name4 = {"Axel","Stein","35","German"};
dm.addRow(name4);
/*
update = new JButton("Update");
contentPane.add(update);
update.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
model2 = (DefaultTableModel)tab.getModel();
String updateVal = "Record1";
model2.setValueAt(updateVal, 0, 0);
}
});*/
}
public static void main(String[] args){
PopulateTableRecordsundUpdate populate = new PopulateTableRecordsundUpdate();
populate.populateTable();
populate.setVisible(true);
//Aktualizaja rekordow w tabeli
ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
TaskToExecute task = new TaskToExecute();
scheduled.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS);
}
}
class TaskToExecute extends PopulateTableRecordsundUpdate implements Runnable{
public void run()
{
model2 = (DefaultTableModel)tab.getModel();
String updateVal = "Record1";
//String updateVal = model2.getValueAt(0, 0).toString();
//System.out.print("Akcja wykonywana czasowo");
model2.setValueAt(updateVal, 0, 0);
/*
int col = 0;
int row = 0;
for(int count = 0 ; count < table.getColumnCount(); count++) {
model2.setValueAt(updateVal, row, col);
model2.setValueAt(updateVal2, row, col+1);
model2.setValueAt(updateVal3, row, col+2);
model2.setValueAt(updateVal4, row, col+3);
row++;
}*/
}
}
Mam nadzieje, że jest to zrozumiałe poprzez dodatkowe komentarze.