2017-06-03 3 views
1

Okay, ich mache ein Programm, das erfordert, dass ich Variablen auf der grafischen Oberfläche drucken. Da ich keine Ahnung habe, wie viele Variablen es geben wird, würde ich gerne eine for-Schleife verwenden. Das Problem ist, wenn ich dies tue, geht der vorherige Text, den ich gedruckt habe, weg. Auch wenn ich den Text in verschiedenen Bereichen der GUI ausdrucke. Wie könnte ich zum Beispiel 1 2 3 4 5 20 Pixel entfernt von jeder Nummer mit JLabel drucken und alle Zahlen auf der GUI bleiben?Drucken auf Java-GUI mit for-Schleife

Das ist, was ich mit so weit gekommen sind:

JFrame frame = new JFrame("Email Sender"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

JPanel contentPane = new JPanel(); 
contentPane.setOpaque(true); 
contentPane.setBackground(Color.WHITE); 
contentPane.setLayout(null); 

frame.setContentPane(contentPane); 
frame.setSize(100, 60); 
frame.setLocationByPlatform(true); 
frame.setVisible(true); 

int a[]=new int[5]; 
a[0]=10; 
a[1]=20; 
a[2]=70; 
a[3]=40; 
a[4]=50; 
JLabel num = new Jlabel; 
for (int i = 0; i < a.length; i++) 
{ 
    num.setText((String.valueOf(a[i])); 
    num.setLocation(20*i, 20); 
    contentPane.add(num); 

} 
+0

Side Spitze unterstützt: Check out [Array Literale] (http: // cs-Grundlagen .com/tech-interview/java/java-array-literals.php) beim Erstellen von zur Kompilierungszeit bekannten Arrays. Es ist einfach schönere Syntax. – byxor

+0

Rufen Sie 'setVisible' auf dem Rahmen auf, nachdem Sie alles hinzugefügt haben – MadProgrammer

Antwort

1

So gibt mindestens drei grundlegende Probleme sind ...

One ...

Sie nur eine haben Komponente, also, wenn Sie so etwas tun ...

JLabel num = new JLabel(); 
for (int i = 0; i < a.length; i++) 
{ 
    num.setText((String.valueOf(a[i])); 
    num.setLocation(20*i, 20); 
    contentPane.add(num); 

} 

Alles, was Sie tun, ist die Einstellung der Eigenschaften einer bereits vorhandenen Komponente und versucht, sie zu einem Container hinzuzufügen, in dem sie sich bereits befindet, so dass es immer nur eine Komponente gibt.

Zwei

Sie setzen nie die Größe des JLabel, und da Sie ein null Layout verwenden entschieden haben, werden Sie diese

Drei nennen

verantwortlich dafür Sie setVisible auf die Frame, bevor die Benutzeroberfläche fertig ist, wurde eingerichtet. Während Sie dies tun können, ist es einfacher, die Benutzeroberfläche vor dem Anzeigen des Frames einzurichten, da dadurch andere Probleme reduziert werden. Wenn Sie Komponenten mit dem Rahmen in einer dynamischen Art und Weise hinzufügen möchten, müssen Sie revalidate und repaint auf dem Behälter rufen Sie sie

Beispiel hinzugefügt haben ...

Nun nehmen, dass alle in Betracht Sie etwas eher wie dieses ...

import java.awt.Color; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.border.EmptyBorder; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JPanel contentPane = new JPanel(); 
       contentPane.setBackground(Color.WHITE); 
       frame.setContentPane(contentPane); 

       int a[] = new int[5]; 
       a[0] = 10; 
       a[1] = 20; 
       a[2] = 70; 
       a[3] = 40; 
       a[4] = 50; 
       for (int i = 0; i < a.length; i++) { 
        JLabel num = new JLabel((String.valueOf(a[i]))); 
        num.setBorder(new EmptyBorder(0, 20, 0, 0)); 
        contentPane.add(num); 
       } 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

} 

nb tun könnte: ich mag es nicht, auch nicht stillschweigend dulden ich, die Verwendung von null Layouts für alle Zeiten Menschen „denken“ sie brauchen sie, sie tun nicht

Wenn Sie eine variable Anzahl von Komponenten aufgelistet, könnten Sie ein JList praktische Verwendung finden, da es vertikale und horizontale Verpackung und Scrollen