Dynamische GUI's

  • Themenstarter Themenstarter TBuffon
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
T

TBuffon

Gast
guten abend
ich habe eine frage betreffend dynamischer GUI Entwicklung unter Swing.
Wie programmiert man am besten dynamische GUIs?
Mit dynamisch meine ich z.B. folgendes:

Das eine Mal, wenn ich die Applikation starte brauche ich 5 JLabels um den Text anzuzeigen, das andere Mal nur 3.

Wie realisiert man das am Besten?

Vielen Dank für Eure Antworten.
 
einfach ne forschleife einbauen mit unterschiedlichen anzahl von durchläufen
dann haste mal 1 und das andere mal 100 buttons 😉
 
ich habe mal einen ersten anlauf genommen mit meinem GUI:
Code:
    // labels
    JLabel nr;   
    JLabel state;  
    JLabel uFr;
    JLabel uFl; 
    JLabel rel;  
    JLabel name;

    
    // array of the indexes of all lables     
    int x = 11;  // x start position of the components
    int y = 200; // y start position of the components
    
    // go through all valid groups
    for(int i = 0; i < drums.length; i++){
      
      
      // positioning of the components
      nr = new JLabel("nr: " + (i+1));
      nr.setFont(new java.awt.Font("Dialog",1,11));
      nr.setBounds(x,y,90,15);
      state = new JLabel("State: " + drums.arr[i].state);
      state.setBounds(x,y+15,90,15);
      uFr = new JLabel("u Fr: " + drums.arr[i].uFr);
      uFr.setBounds(x,y+30,90,15);
      uFl = new JLabel("u Fl: " + drums.arr[i].uFl);
      uFl.setBounds(x,y+45,90,15);
      rel = new JLabel("Rel: " + drums.arr[i].rel);
      rel.setBounds(x,y+60,90,15);
      name = new JLabel("Name: " + drums.arr[i].name);
      name.setBounds(x,y+75,90,15);
      
      // add the components to the panel
      pane.add(nr);
      pane.add(state);
      pane.add(uFr);
      pane.add(uFl);
      pane.add(rel);
      pane.add(name);
      
      pane.repaint();

    }

nun, das zeichnen funktioniert!
nur wenn der inhalt der Labels ändert, wird auf der oberfläche der alte und der neue übereinander angezeigt. dies, weil ja über das alte label einfach ein neues gezeichnet wird.
wie kann man das alte label zurücksetzen oder löschen?

grüsse
 
Anstatt ein neues zu zeichnen reichts den Text im alten Label zu ändern. Du kaufst dir ja auch kein neues Mofa, wenn deinem der Sprit ausgeht...
 
Code:
    // labels 
    JLabel nr = new JLabel();    
    JLabel state = new JLabel();  
    JLabel uFr = new JLabel(); 
    JLabel uFl = new JLabel(); 
    JLabel rel = new JLabel();  
    JLabel name = new JLabel(); 

    
    // array of the indexes of all lables      
    int x = 11;  // x start position of the components 
    int y = 200; // y start position of the components 
    
    // go through all valid groups 
    for(int i = 0; i < drums.length; i++){ 
      
      
      // positioning of the components 
      nr.setText("nr: " + (i+1)); 
      nr.setFont(new java.awt.Font("Dialog",1,11)); 
      nr.setBounds(x,y,90,15); 
      state.setText("State: " + drums.arr[i].state); 
      state.setBounds(x,y+15,90,15); 
      uFr.setText("u Fr: " + drums.arr[i].uFr); 
      uFr.setBounds(x,y+30,90,15); 
      uFl setText("u Fl: " + drums.arr[i].uFl); 
      uFl.setBounds(x,y+45,90,15); 
      rel.setText("Rel: " + drums.arr[i].rel); 
      rel.setBounds(x,y+60,90,15); 
      name.setText(("Name: " + drums.arr[i].name); 
      name.setBounds(x,y+75,90,15); 
      
      // add the components to the panel 
      pane.add(nr); 
      pane.add(state); 
      pane.add(uFr); 
      pane.add(uFl); 
      pane.add(rel); 
      pane.add(name); 
      
      pane.repaint(); 

    }

meinst du etwa so?
so zeigt es mir aber z.b. bei drei durchläufen in der for schleife nur eine kollonne an, da man ja immer wieder die gleiche referenz des JLabels auf dem pane added?!
 
Da ist sowas gemeint:

Code:
JLabel[] labels = new JLabel[ 123 ];

// zuerst hinzufuegen
for( int i = 0; i < labels.length; i++ ){
  panel.add( labels[i] );
}

// und irgendwann viel viel spaeter, vielleicht auch mehr als einmal:
label[ 45 ].setText( "huhu, dies ist ein neuer Text" );
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben