Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JButton setText()错误_Java_User Interface - Fatal编程技术网

Java JButton setText()错误

Java JButton setText()错误,java,user-interface,Java,User Interface,当你按下按钮时,我试图将新文本设置为按钮。然而它似乎不起作用,我做错了什么,我不知道是什么 编辑------我附上代码以便更容易理解我的意思 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class GrowAndShrinkSquareGUItest { JFrame frame; SquareDrawPanel bigGreen; SquareDrawPanel smallGreen; J

当你按下按钮时,我试图将新文本设置为按钮。然而它似乎不起作用,我做错了什么,我不知道是什么

编辑------我附上代码以便更容易理解我的意思

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class GrowAndShrinkSquareGUItest {
JFrame frame;
SquareDrawPanel bigGreen;
SquareDrawPanel smallGreen;
JButton button;
growAndShrinkListener listener;

public class SquareDrawPanel extends JPanel {

    int width;
    int height;

    SquareDrawPanel(int w, int h) {

        width = w;
        height = h;
    }

    public void paintComponent(Graphics g) {

        g.setColor(Color.green);
        g.fillRect(frame.getWidth() / 2 - (width / 2), frame.getHeight()
                / 2 - (height / 2) - 15, width, height);

    }

}

public class growAndShrinkListener implements ActionListener {

    // JButton button;

    growAndShrinkListener(JButton button) {

        button = new JButton("Click me to grow the Square");
        frame.add(button, BorderLayout.NORTH);
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        button.setText("Unselect all");

    }
}

public static void main(String[] args) {
    GrowAndShrinkSquareGUItest test = new GrowAndShrinkSquareGUItest();
    test.go();
}

private void createPanels() {

    bigGreen = new SquareDrawPanel(400, 400);
    smallGreen = new SquareDrawPanel(100, 100);

}

private void drawPanel(JPanel panel) {

    frame.add(panel);
    panel.setVisible(true);
    frame.add(panel, BorderLayout.CENTER);

}

private void createListenerButton() {
    listener = new growAndShrinkListener(button);
}

private void loop(){}

public void go() {
    frame = new JFrame();
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    createPanels();
    drawPanel(smallGreen);
    createListenerButton();
    frame.setVisible(true);


}

}这是因为您使用的
按钮
变量未在
actionPerformed
方法的范围内定义。Java变量有作用域,它们可以在花括号中定义。
actionPerformed
方法超出了
grownandshrinklistener
方法的大括号。固定代码:

public class growAndShrinkListener implements ActionListener {



    growAndShrinkListener(JButton button) {

        button = new JButton("Click me to grow the Square");
        frame.add(button, BorderLayout.NORTH);
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();

        if(source instanceof JButton) {
            button = (JButton) source;
            button.setText("Click to shrink square");
        }
    }
}
或者,您可以使用私有变量:

public class growAndShrinkListener implements ActionListener {

    private JButton button;

    growAndShrinkListener() {

        button = new JButton("Click me to grow the Square");
        frame.add(button, BorderLayout.NORTH);
        button.addActionListener(this);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        button.setText("Click to shrink square");
    }
}
注意:不应覆盖构造函数中参数的内容。您得到的参数不是指向被调用方变量的“指针”,而是对该变量的简单引用。如果覆盖,则内容将为您丢失,被呼叫方将不知道这一点。

这样更改

public class YourSuperClass{
    private JButton button;
    public YourSuperClass(){
         // your logics 
         button = new JButton();
         button.addActionListener(new GrowAndShrinkListener(button));
         frame.add(button, BorderLayout.NORTH);
    }
    class GrowAndShrinkListener implements ActionListener {
        GrowAndShrinkListener(JButton button) {

        }

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == button){
                button.setText("Click to shrink square");
            }

        }
    }
}
试试这个:

        import javax.swing.*;
        import java.awt.*;
        import java.awt.event.*;
        class frame extends JFrame 
       { 
       JButton b;
       public frame()
        {
           setLayout(new BorderLayout());
           b=new JButton("Press");
           add(b,BorderLayout.SOUTH);
           b.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e)
            {
             b.setText("Clicked");
            }
          });
        }

        public static void main (String[] args) {
            frame f=new frame();
            f.setExtendedState(MAXIMIZED_BOTH);
            f.setVisible(true);
        }
      }

请指定错误。哪里定义了
按钮
?它似乎不是为
actionPerformed
方法定义的。这个类是一个更大类的内部类。我在超类中声明了button。这就像在问我想让你帮我找到我的物品,它是绿色的,请找到它。请指定输出内容以及您期望的内容。问题是这一行
button=new JButton(“单击我以增大正方形”)。您正在覆盖构造函数参数
按钮的值。这不会影响实例变量
按钮
。简单更改为
this.button=new JButton(“单击我以增大正方形”)可能不起作用,因此请参阅答案以了解更好的代码结构。