2012-03-26 9 views
2

I verwendet Windowbuilder Pro Großteil des Codes in der GuiTest Klasse unten, mit Ausnahme von Linien mit ‚////////‘ nach rechts zu erzeugen, die ich hinzugefügt (oder verändert). WindowBuilder Pro (ein WYSIWYG) fügt dem Konstruktor Code hinzu - hat sich jedoch noch nicht bei mir über Änderungen beschwert. Ich möchte weiterhin mit WindowBuilder Pro auf diese Weise bauen, also Ich möchte keine Änderungen an der allgemeinen Architektur der GUI vornehmen.-Update eines Java Swing JList

Ich habe auch eine DataTest-Klasse weiter unten erstellt, um einen bestimmten langsamen Prozess des Sammelns eines Datensatzes zu emulieren.

Hier ist meine Frage: Was ich tun möchte, ist die JList mit den neuen Daten aus der Klasse DATATEST aktualisieren.

GuiTest Klasse:

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.ListSelectionModel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; /////////// 
import javax.swing.JList; 
import javax.swing.JLabel; 

import discoverTool.DataTest; 

public class GuiTest extends JFrame implements ListSelectionListener{ 
    private String[] foo = {"thing1","thing2","thing3"}; ////////////// 

    private JPanel contentPane; 
    private JLabel lblNewLabel; //////////////made global 

    /** 
    * Launch the application. 
    * @throws InterruptedException 
    */ 
    public static void main(String[] args) throws InterruptedException { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        GuiTest frame = new GuiTest(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     DataTest dt = new DataTest();///////////// 
     GuiTest gt = new GuiTest(); 
     gt.foo = dt.foo; 
     gt.updateJList(dt.foo); 
    } 

    public void updateJList(String[] f){ 
     //reset the list with f 
    } 

    /** 
    * Create the frame. 
    */ 
    public GuiTest() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JList list = new JList(foo); 
     list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); ///////////// 
     list.setSelectedIndex(0);    ////////////// 
     list.addListSelectionListener(this); //////////////  
     list.setBounds(10, 11, 134, 240); 
     contentPane.add(list); 

     JPanel panel = new JPanel(); 
     panel.setBounds(154, 11, 188, 81); 
     contentPane.add(panel); 
     panel.setLayout(null); 

     //JLabel lblNewLabel = new JLabel("New label");///////// 
     lblNewLabel = new JLabel("New label");/////////// 
     lblNewLabel.setBounds(10, 11, 46, 14); 
     panel.add(lblNewLabel); 
    } 

    public void valueChanged(ListSelectionEvent e) {/////////////// 
     JList jList = (JList)e.getSource();//////////// 
     lblNewLabel.setText(foo[jList.getSelectedIndex()]);/////////// 
    }/////////// 
} 

DATATEST Klasse:

public class DataTest { 

    public String[] foo; 

    public DataTest() throws InterruptedException{ 
     //simulate a long process getting data; 
     Thread.sleep(7000); 
     foo = new String[4]; 
     foo[0]="hey"; 
     foo[1]="hi"; 
     foo[2]="bye"; 
     foo[3]="adios"; 
    } 
} 

Antwort

2

Entweder die neuen Daten zum Modell hinzufügen oder ein neues Modell mit allen Daten erstellen und festgelegt, dass als neues Modell für Die Liste.


Ich habe auch eine Klasse DATATEST weiter unten einen gewissen langsamen Prozess der Erfassung eines Datensatzes zu emulieren.

Rufen Sie es von einer SwingWorker.


Windowbuilder Pro (ein WYSIWYG) ..

Nein, WYSIB (What You Is Gebrochene sehen). Java-Layout-Manager wurden entwickelt, um die korrekte Größe von Komponenten basierend auf PLAF, OS, Bildschirmauflösung, Schriftgröße und Optimierungen zwischen den Versionen zu berechnen (von Kopf bis Fuß, wahrscheinlich mehr). Sie ermöglichen auch die Größe von GUIs. Was WindowBuilder Pro mit der Verwendung von setBounds() erstellt hat, ist eine zerbrechliche GUI, die darauf wartet, zu brechen.

+1

WindowBuilder ist nicht auf absolute Koordinaten beschränkt; Sie können alle gängigen Layout-Manager verwenden: GridBagLayout, MiGLayout, SpringLayout, FormLayout, GroupLayout usw. Wenn Sie viel GUI-Code von Hand schreiben, sollten Sie es versuchen. – rob