2017-02-15 32 views
0

Я должен запросить базу данных, чтобы получить данные для записи на JLabel и ускорить открытие диалоговогообновление JLabel текста после открытия JDialog

я создал JLabel без текста и набора текста после того, как сделали SwingWorker процесс

но JLabel текст не будет обновлен

есть ли способ для достижения этой

Вот код Src DIALOG моего:

package com.caisse.caisseFrame.dialogs; 

import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Image; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JDialog; 
import javax.swing.JLabel; 
import javax.swing.SwingWorker; 

import com.caisse.ConnectDB; 
import com.caisse.CustomComponent.JButtonCustom; 
import com.caisse.CustomComponent.JPanelCustom; 
import com.caisse.caisseFrame.CaisseFrame; 
import com.soqop.caisse.dao.TicketDAO; 

public class LectureXDialog extends JDialog { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    JButton ok_btn; 
    TicketDAO ticketDAO; 

    public LectureXDialog(final CaisseFrame parent) { 
     setAlwaysOnTop(true); 
     setSize(new Dimension(300, 280)); 
     setLocationRelativeTo(parent); 
     setTitle("Lecture X"); 
     setVisible(true); 
     setModalityType(ModalityType.DOCUMENT_MODAL); 
     parent.setEnabled(false); 

     ticketDAO = new TicketDAO(ConnectDB.getInstance()); 

     final JPanelCustom componentsPanel = new JPanelCustom(); 
     GridBagLayout componentsPanelLayout = new GridBagLayout(); 
     componentsPanel.setLayout(componentsPanelLayout); 

     final JLabel lectureXlabel = new JLabel(); 
     lectureXlabel.setFont(new Font("Cambria", Font.BOLD, 24)); 
     lectureXlabel.setPreferredSize(new Dimension(250, 55)); 
     lectureXlabel.setMinimumSize(new Dimension(250, 55)); 
     GridBagConstraints gbc_lectureXlabel = new GridBagConstraints(); 
     gbc_lectureXlabel.insets = new Insets(2, 2, 2, 2); 
     gbc_lectureXlabel.gridx = 0; 
     gbc_lectureXlabel.gridy = 0; 
     gbc_lectureXlabel.anchor = GridBagConstraints.CENTER; 
     componentsPanel.add(lectureXlabel, gbc_lectureXlabel); 

     ok_btn = new JButtonCustom("ok"); 
     ok_btn.setFont(new Font("Cambria", Font.BOLD, 24)); 
     try { 
      Image img = ImageIO.read(getClass().getResource("/resources/ok.png")); 
      ok_btn.setIcon(new ImageIcon(img)); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     ok_btn.setPreferredSize(new Dimension(150, 55)); 
     ok_btn.setMinimumSize(new Dimension(150, 55)); 
     ok_btn.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       parent.setEnabled(true); 
       parent.setFocus(); 
       LectureXDialog.this.dispose(); 
      } 
     }); 
     GridBagConstraints gbc_ok_btn = new GridBagConstraints(); 
     gbc_ok_btn.insets = new Insets(2, 2, 2, 2); 
     gbc_ok_btn.gridx = 0; 
     gbc_ok_btn.gridy = 1; 
     componentsPanel.add(ok_btn, gbc_ok_btn); 

     add(componentsPanel); 

     addWindowListener(new java.awt.event.WindowAdapter() { 
      @Override 
      public void windowClosing(java.awt.event.WindowEvent windowEvent) { 
       parent.setEnabled(true); 
       parent.setFocus(); 
       LectureXDialog.this.dispose(); 
      } 
     }); 


     SwingWorker worker = new SwingWorker<Boolean, Void>() { 
      String text = ""; 
      @Override 
      public Boolean doInBackground() { 
        text = "<html><center>Lecture X : " + ticketDAO.getLectureX() + "</center></html>"; 
       return true; 
      } 

      @Override 
      public void done() { 
       lectureXlabel.setText(text); 
       lectureXlabel.revalidate(); 
       lectureXlabel.repaint(); 
       componentsPanel.revalidate(); 
       componentsPanel.repaint(); 
       getContentPane().revalidate(); 
       getContentPane().repaint(); 
      } 
     }; 

    } 

} 
+1

Вы не называется 'worker.execute()' в любом месте, поэтому работник не выполняется ... – Frakcool

+1

Помните, что 'SwingWorker' может возвращать данные, поэтому вместо того, чтобы вернуться' Boolean', вам может возвращать 'String' и использовать' get' в методе 'done' для получения возвратов работника, несколько более безопасного и более пригодного для использования, тогда используя поле экземпляра – MadProgrammer

ответ

2

Чтобы сделать фоновое изображение Swing Worker, вам необходимо позвонить по методу SwingWorker#execute(). Если вы не добавите его, ну ... он не будет знать, когда начать работать. Это, как и любой другой переменной, как:

JLabel label = new JLabel("Hello world"); 

Но если вы никогда не добавить, что label к чему-либо (или как ActionListener не добавляют к JButton) он никогда не будет добавлено/казнены.

worker.execute(); 

Внутри вашего конструктора или где вы хотите, чтобы он начал работать.


В соответствии с @ MadProgrammer замечания:

Remember, SwingWorker может возвращать данные, поэтому вместо того, чтобы вернуться Boolean, вы можете вернуть String и использовать get в методе done, чтобы получить отдачу от работника , несколько более безопасным и более пригодным для использования, затем с использованием поля экземпляра

Он ссылается на изменение кода вашего работника следующим образом:

SwingWorker worker = new SwingWorker<Boolean, Void>() { 
    @Override 
    public String doInBackground() { 
     return "<html><center>Lecture X : " + ticketDAO.getLectureX() + "</center></html>"; 
    } 

    @Override 
    public void done() { 
     lectureXlabel.setText(get()); 
     lectureXlabel.revalidate(); 
     lectureXlabel.repaint(); 
     componentsPanel.revalidate(); 
     componentsPanel.repaint(); 
     getContentPane().revalidate(); 
     getContentPane().repaint(); 
    } 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^