在java中就是对一个按钮进行监听,为什麽当按下按钮的时候没反应,只有改变一下界面的大小时,那种反 20

在java中就是对一个按钮进行监听,为什麽当按下按钮的时候没反应,只有改变一下界面的大小时,那种反应效果才出来,有人遇到过这种情况么?... 在java中就是对一个按钮进行监听,为什麽当按下按钮的时候没反应,只有改变一下界面的大小时,那种反应效果才出来,有人遇到过这种情况么? 展开
 我来答
cxzucc
2015-09-11 · TA获得超过1317个赞
知道小有建树答主
回答量:1735
采纳率:79%
帮助的人:585万
展开全部
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class TestFrame extends JFrame
{
    private JLabel lblText = new JLabel("Text");
    private JButton btnChangeText = new JButton("Change Text");
    private JButton btnAdd = new JButton("Add Button");
    private int i = 0;
     
    public TestFrame()
    {
        this.setLayout(new BorderLayout());
         
        JPanel panel1 = new JPanel();
        panel1.add(lblText);
         
        final JPanel panel2 = new JPanel(new GridLayout(0, 5));
         
        JPanel panel3 = new JPanel();
        panel3.add(btnChangeText);
        panel3.add(btnAdd);
         
        add(panel1, BorderLayout.NORTH);
        add(panel2, BorderLayout.CENTER);
        add(panel3, BorderLayout.SOUTH);
         
        btnChangeText.addActionListener(new ActionListener()    //改变标签的时候,只要改了标签的text值,界面就会相应变化
            {
                public void actionPerformed(ActionEvent event)
                {
                    if (lblText.getText().equals("Text"))
                    {
                        lblText.setText("12345");
                    }
                    else
                    {
                        lblText.setText("Text");
                    }
                }
            });
         
        btnAdd.addActionListener(new ActionListener()    //添加组件的时候,add完需要validate才能生效
            {
                public void actionPerformed(ActionEvent event)
                {
                    final JButton button = new JButton("Delete " + i);
                    i++;
                    panel2.add(button);
                    button.addActionListener(new ActionListener()
                        {
                            public void actionPerformed(ActionEvent event)    //删除组件的时候,先把组件设为不可见,然后删去,最后validate
                            {
                                button.setVisible(false);
                                panel2.remove(button);
                                panel2.validate();
                                TestFrame.this.pack();    //这句话主要是用来调节界面大小,也可以不要这句,自己手动调节界面大小
                            }
                        });
                    panel2.validate();
                    TestFrame.this.pack();
                }
            });
    }
     
    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    JFrame frame = new TestFrame();
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
            });
    }
}
追问
能留下扣扣么,有问题还问你,谢谢了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式