Java 使用ActionListener和for循环将JLabel添加到JFrame
我想使用for循环和ActionListener向JFrame添加一个JLabels。这个想法是:我有一个按钮,当我点击按钮时,程序正在添加标签,但在我的代码中,当我点击按钮时,什么都没有发生,没有按钮和ActionListener,标签正在正确添加。代码: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
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[]再次标记
,从而隐藏同名的类级别属性。。