2016-08-07 35 views
0

Ich habe eine Anwendung Berechnung Clock-in Stunden aller sieben Tage in einer Woche. Was ich vorhabe, ist, dass die Benutzer die Eingabe und das Verlassen von Stunden/Minuten jeden Tag einführen und somit diese Daten sammeln, um Berechnungen durchzuführen.[Swing] Fügen Sie das gleiche Label zu verschiedenen Ort in einem Panel, ohne zu kopieren

Der UI-Teil sollte wie:

Monday:  mondayEntryHour : mondayEntryMinutes  mondayLeaveHour : mondayLeaveMinutes   
Tuesday: tuesdayEntryHour : tuesdayEntryMinutes  tuesdayLeaveHour : tuesdayLeaveMinutes 
.... 

All, wo ich Daten sammeln, JTextFields sind, und die : zwischen ihnen ist ein JLabel. Alle 14 Labels haben denselben Inhalt, dieselbe Schriftart und denselben Stil, aber ich kann einfach nicht die gleiche Variable erstellen und sie 14-mal überall hinzufügen, da sie nur zum letzten Mal hinzugefügt wurde.

Um zu beweisen, was ich sage, habe ich eine SCCEE hier:

import java.awt.Cursor; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

import net.miginfocom.swing.MigLayout; 

public class RepeatedJLabel extends JFrame { 
    public RepeatedJLabel() { 
     run(); 

    } 

    public void run() { 
     JPanel p = new JPanel(); 
     p.setLayout(new MigLayout("debug, fill", "[grow]", "[]10[]10[]")); 

     JLabel label = new JLabel("MY LABEL 1"); 
     p.add(label, "cell 0 1, grow"); 
     p.add(label, "cell 0 2, grow"); 
     p.add(label, "cell 0 3, grow"); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     getContentPane().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
     getContentPane().add(p); 

     setVisible(true); 
     setLocationRelativeTo(null); 
     setResizable(true); 
     pack(); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       RepeatedJLabel test = new RepeatedJLabel(); 

      } 
     }); 
    } 
} 

Muss ich schaffen 14 Variablen für sie? Es ist dumm. Ich möchte mich nicht mit Copy/Shallow Copy/Deep Copy dieser Variable vermischen, weil es zu einfach ist, herumzualbern. Irgendeine Idee?

+2

erstellen Factory-Methode und es nennen in einer Schleife. –

+2

Und Sie scheinen Variable mit Objekt zu verwirren. Ja, du brauchst 14 JLabel-Objekte, aber du brauchst sicherlich keine 14 JLabel-Variablen. –

+1

........... und ich frage mich, ob eine JTable für diese spezielle Situation nicht am besten funktionieren würde ... –

Antwort

0
  1. ein factory method Verwenden jeder JLabel zu erstellen:

    private static JLabel newLabel() { 
        return new JLabel("MY LABEL 1"); 
    } 
    
  2. Verwenden Sie eine for Schleife die JLabel jedes Mal hinzuzufügen:

    final int amountOfLabels = 3; 
    for(int i = 0; i < amountOfLabels; i++) { 
        panel.add(newLabel(), "cell 0 " + i + ", grow"); 
    } 
    
+0

Endlich ist es so, wie ich es angenommen habe. Einfach zu integrieren. Und, wenn wir mehr Parameter benötigen, ändern Sie diese Methode und fertig. – FaithReaper