Automatyczna aktualizacji tabeli

Odpowiedz Nowy wątek
2019-12-03 16:17
0

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.


:)

Pozostało 580 znaków

2019-12-03 16:49
0
public static void main(String[] args){

    PopulateTableRecordsundUpdate populate = new PopulateTableRecordsundUpdate(); // <- ten obiekt wyświetlasz
    populate.populateTable();
    populate.setVisible(true);

    //Aktualizaja rekordow w tabeli
    ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);

    TaskToExecute task = new TaskToExecute(); // <- ten obiekt aktualizujesz
    scheduled.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS);
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0