2017-06-03 169 views
1

好吧,所以我正在做一個程序,需要我打印變量到圖形界面。因爲我不知道會有多少變量,我想使用for循環。問題是,當我這樣做時,我已經打印的前一個文本消失了。即使我在GUI的不同區域上打印文本。我怎麼能打印例如1 2 3 4 5與JLabel每個數字相隔二十個像素,並讓所有的數字留在GUI?打印到Java GUI的for循環

這就是我想出迄今:

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-literals.php)在編譯時創建數組時已知。這只是更好的語法。 – byxor

+0

在添加完所有內容之後,在框架上調用'setVisible' – MadProgrammer

回答

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

} 

你只是在設置屬性已經存在的組件,並嘗試添加到它已經駐留的容器中,所以只有一個組件。

兩個

你永遠不設置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); 
      } 
     }); 
    } 

} 

注:我不喜歡,我也不縱容,利用null佈局,爲所有時代人們「認爲」他們需要,他們不是

如果列出可變數量的組件,您可能會發現使用更實用的JList,因爲它支持垂直和水平環繞和滾動