Java 使用ActionListener和for循环将JLabel添加到JFrame

Java 使用ActionListener和for循环将JLabel添加到JFrame,java,swing,user-interface,jframe,labels,Java,Swing,User Interface,Jframe,Labels,我想使用for循环和ActionListener向JFrame添加一个JLabels。这个想法是:我有一个按钮,当我点击按钮时,程序正在添加标签,但在我的代码中,当我点击按钮时,什么都没有发生,没有按钮和ActionListener,标签正在正确添加。代码: public class Test extends JFrame implements ActionListener{ JLabel[] labels; TextField dane; JButton button; public Tes

我想使用for循环和ActionListener向JFrame添加一个JLabels。这个想法是:我有一个按钮,当我点击按钮时,程序正在添加标签,但在我的代码中,当我点击按钮时,什么都没有发生,没有按钮和ActionListener,标签正在正确添加。代码:

public class Test extends JFrame implements ActionListener{
JLabel[] labels;
TextField dane;
JButton button;

public Test(){
    super();
    dane=new TextField();
    button=new JButton("Oblicz");
    setLayout(new GridLayout(33,0));
    add(dane);
    add(button);
    setVisible(true);
    pack();
}
@Override
public void actionPerformed(ActionEvent v) {
        showGUI();
        revalidate();
        repaint();
}
private JLabel[] createLabels(){
    JLabel[] labels=new JLabel[20];
    for (int i=0;i<20;i++){
        labels[i]=new JLabel("message"+i);
    }
    return labels;
}
private void showGUI(){
    labels=createLabels();
    for (int i=0;i<labels.length;i++){
        this.add(labels[i]);
    }
}
public static void main(String[] args){
    new Test();
}    
}
公共类测试扩展JFrame实现ActionListener{
JLabel[]标签;
丹恩;
按钮;
公开考试(){
超级();
dane=新文本字段();
按钮=新的JButton(“Oblicz”);
setLayout(新网格布局(33,0));
添加(丹麦);
添加(按钮);
setVisible(真);
包装();
}
@凌驾
已执行的公共无效操作(操作事件v){
showGUI();
重新验证();
重新油漆();
}
私有JLabel[]createLabels(){
JLabel[]标签=新的JLabel[20];

对于(int i=0;i将组件添加到可见GUI时,基本代码为:

panel.add(...);
panel.revalidate(); // to invoke the layout managers
panel.repaint(); // to paint the new components
因此,在循环完成后,将标签添加到帧中,您需要重新验证()帧

…但在我的代码中,当我单击按钮时,什么都没有发生

我看不到您已将侦听器附加到按钮的位置。请尝试:

button.addActionListener(this);

此代码有很多错误。1)它违反了EDT规则。2)它添加组件,然后设置布局。3)它无法调用
pack()
。4)它混合了Swing和AWT。5)它显式地设置GUI的大小。6)创建并返回标签,然后忽略这些标签。7)
showGUI()
声明
JLabel[]再次标记
,从而隐藏同名的类级别属性。。