好的,我正在制作一个程序,要求我将变量打印到图形界面。因为我不知道有多少变量,我想使用for循环。问题是当我这样做时,我印刷的前一个文字消失了。即使我在GUI的不同区域打印文本。我怎么能用JLabel打印例如1 2 3 4 5
每个数字20个像素,并且所有数字都保留在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 :(得分: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
布局,因此您有责任这样做
在UI设置完成之前,您在框架上调用setVisible
。虽然您可以这样做,但在显示框架之前建立UI更容易,因为它可以减少其他问题。如果您想以动态方式向框架添加组件,则需要在已将其添加到
revalidate
和repaint
现在,考虑到所有这些,你可以做更像这样的事情......
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
布局,因为人们“认为”他们需要这些布局,他们不会 < / p>
如果列出了可变数量的组件,您可能会发现使用JList
更实用,因为它支持垂直和水平包装和滚动