2017-06-03 10 views
1

私はグラフィカルインターフェイスに変数を印刷する必要のあるプログラムを作っています。どのくらいの変数があるのか​​わからないので、forループを使いたいと思います。問題は、私が印刷した以前のテキストが消えてしまうことです。 GUIの異なる領域にテキストを印刷する場合でも。どのようにして、1 2 3 4 5の20ピクセルからJLabelで番号をずらして印刷し、すべての数値をGUI上に残すことができますか?forループを使ってJava GUIにプリント

これは私がこれまでに出ているものです:

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

サイドヒント:[配列リテラル](http:// cs-fundamentals .com/tech-interview/java/java-array-literalals.php)を参照してください。それだけで良い構文です。 – byxor

+0

すべてを追加した後、フレーム上で 'setVisible'を呼び出します – MadProgrammer

答えて

1

だから、少なくとも三つの基本的な問題...

ワン...

があるあなたは1つしかありませんコンポーネントなので、このような場合は...

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); 

} 

プロパティを設定するだけですすでに存在しているコンテナに追加しようとしているため、1つのコンポーネントしか存在しません。

あなたはJLabelのサイズを設定したことがない、とあなたはnullレイアウトを使用することを決定しましたので、あなたはあなたが上setVisibleを呼び出し、この

を行うための責任になりますUIの設定が完了する前にこれを行うことができますが、フレームを表示する前にUIを確立して、他の問題を減らすのが簡単です。あなたは、動的な方法でフレームにコンポーネントを追加したい場合は、あなたのアカウントにすべてのことを取って、あなたは

例...今

にそれらを追加したコンテナの上にrevalidaterepaintを呼び出す必要があります、あなたはより多くのこのような何か...

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を行うことができます:私は好きではない、また私は容赦しない、nullレイアウトの使用は、すべての回の人々が、「考える」、彼らはそれらを必要とします、彼らはしない

可変数のコンポーネントをリストしている場合は、JListを使用すると、より実用的で、垂直方向と水平方向のラッピングとスクロールが可能です。

関連する問題