Как автоматически обновлять графический интерфейс SWING при любых изменениях базы данных - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть страница (Swing GUI), где я отображаю данные в соответствии с некоторыми условиями.Когда страница загружается, страница извлекает данные из БД и отображает данные в графическом интерфейсе.Теперь, если есть какие-либо изменения в базе данных, я хочу, чтобы это изменение было немедленно отражено в моем графическом интерфейсе без запуска / перезагрузки / обновления.Любая идея, как реализовать эту функциональность.Я использую JDBC Connection ... Просьба предложить ... Примечание: я не хочу запускать код Java или обновлять страницу, данные должны обновляться автоматически.Заранее спасибо,

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Timer;``
import java.util.TimerTask;

import javax.swing.*;

import DemoDBConn.MysqlConnection;
@SuppressWarnings("serial")
class GUI extends JFrame
{

Connection connection=null;
    public GUI()
    {
        JFrame jf = new JFrame();       
        JLayeredPane LPane = new JLayeredPane();
        jf.getContentPane() .add(LPane);
        ImageIcon i = new ImageIcon(GUI.class.getResource("/images/background4.gif"));

        JLabel background = new JLabel();
        background.setIcon(i);
        background.setBounds(0, 0, 1024, 768);

        JLabel flight = new JLabel();
        flight.setIcon(new ImageIcon(GUI.class.getResource("/images/acs_md_dis.png")));
        flight.setBounds(270, 0, 800, 768);

        JLabel seat1 = new JLabel();
        seat1.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
        seat1.setBounds(320, 230, 10, 20);

        JLabel seat2 = new JLabel();
        seat2.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
        seat2.setBounds(370, 230, 10, 20);

        JLabel seat3 = new JLabel();
        seat3.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
        seat3.setBounds(320, 280, 10, 20);

        JLabel seat4 = new JLabel();
        seat4.setIcon(new ImageIcon(GUI.class.getResource("/images/acSymAmberInd.png")));
        seat4.setBounds(370, 280, 10, 20);


        LPane.add(background, new Integer(1));
        LPane.add(flight, new Integer(2));
        LPane.add(seat1, new Integer(3));
        LPane.add(seat2, new Integer(3));
        LPane.add(seat3, new Integer(3));
        LPane.add(seat4, new Integer(3));




    try {
        String query ="Select * from passengersdetails";
        connection = MysqlConnection.dbConnector();
        PreparedStatement pst= connection.prepareStatement(query);
        ResultSet rs= pst.executeQuery();
        while(rs.next()){
            if(rs.getString("seateNumber").equals("A1")){
                if(rs.getString("status").equals("OK")){
                    seat1.setIcon(new ImageIcon(
                            GUI.class.getResource("/images/acSymGreenInd.png")));
                }
                else if(rs.getString("status").equals("NOT OK")){

                }
                else{

                }
            }
            else if(rs.getString("seateNumber").equals("A2")){

                if(rs.getString("status").equals("OK")){
                    seat2.setIcon(new ImageIcon(
                            GUI.class.getResource("/images/acSymGreenInd.png")));
                }
                else if(rs.getString("status").equals("NOT OK")){

                }
                else{

                }
            }
            else if(rs.getString("seateNumber").equals("A3")){
                if(rs.getString("status").equals("OK")){
                    seat3.setIcon(new ImageIcon(
                            GUI.class.getResource("/images/acSymGreenInd.png")));
                }
                else if(rs.getString("status").equals("NOT OK")){

                }
                else{

                }
            }
           else if(rs.getString("seateNumber").equals("A4")){
               if(rs.getString("status").equals("OK")){
                    seat4.setIcon(new ImageIcon(
                            GUI.class.getResource("/images/acSymGreenInd.png")));
                }
                else if(rs.getString("status").equals("NOT OK")){

                }
                else{

                }
            }   

        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    jf.setSize(1024,768);
    jf.setResizable(false);     
    jf.setVisible(true);
    }

    public static void main(String args[])
    {
        GUI gui = new GUI();



    }
} 

1 Ответ

0 голосов
/ 26 сентября 2018

Хватит мечтать.

Существуют механизмы СУБД для ответов на вопросы (запросы) в виде одного вопроса-одного-ответа.Вопрос ответил?Работа выполнена.Вот как это работает.Они не существуют для того, чтобы отслеживать, какой пользователь задал какой вопрос и хочет получать уведомления, когда на данный ответ на вопрос влияет любое другое обновление базы данных, сделанное кем-либо еще.

Фактически,если ваш запрос представляет собой полноценное реляционное выражение, включающее различные операторы реляционной алгебры, даже не существует механизма, который бы знал, как вычислить этот материал [достаточно эффективно, чтобы вся машина не сразу же остановилась на всех этапахнеобходимые вычисления].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...