2017-06-03 112 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,因为它支持垂直和水平环绕和滚动