如何通过单击Java中的第二个JButton来更改一个JButton的文本

时间:2016-06-20 20:49:42

标签: java swing jbutton

当我点击第二个JButton时,我想更改一个JButton的文字,但它什么都不做。我不知道问题是什么。 如果有人会尽快帮助我,那么我会非常感激,并会尽一切努力。

public class myJPanel6 extends JPanel implements ActionListener
{  

myJButton b1, b2;
student st1;
String s1;

public myJPanel6()
{

    setLayout(new GridLayout(1,1));

    student st1 = new student("Michael", "Robinson", 20);

    b1 = new myJButton(st1.getName());
    b1.addActionListener(this);
    add(b1);

    b2 = new myJButton(st1.WhatIsUp());
            b2.addActionListener(this);
    add(b2);
}

@Override
public void actionPerformed(ActionEvent e) {

   if(e.getSource() == b1)
   {
       s1=st1.WhatIsUp();
       b2.setText(s1);
   }
}

1 个答案:

答案 0 :(得分:4)

实际上你有两个问题:

  1. 您将student声明为局部变量,而其已定义为实例变量(阴影);你应该在你的情况下使用实例变量。

  2. 此外,在您的示例中,b2已经具有WhatIsUp值,因此不会发生任何变化;您应该使用名称设置它以便能够更改按钮1的值。请查看下面的示例以获取完整示例。

  3. 代码:

    package a.b.c;
    
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class myJPanel6 extends JPanel implements ActionListener {
        JButton b1, b2;
        student st1;
        String s1;
    
        public myJPanel6() {
            setLayout(new GridLayout(1, 1));
    
            st1 = new student("Michael", "Robinson", 20);
            b1 = new JButton(st1.getName());
            b1.addActionListener(this);
            add(b1);
    
            b2 = new JButton(st1.WhatIsUp());
            b2.addActionListener(this);
            add(b2);
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == b1) {
                s1 = st1.getName();
                b2.setText(s1);
    
            }
        }
    
        public static void main(String[] args) {
            JFrame frm=new JFrame();
            frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            myJPanel6 pnl=new myJPanel6();
            frm.add(pnl);
            frm.pack();
            frm.setLocationRelativeTo(null);
            frm.setVisible(true);
        }
    }
    

    enter image description here