有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JButton setText()错误

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

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

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);


}

}


共 (3) 个答案

  1. # 1 楼答案

    像这样改变

    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");
                }
    
            }
        }
    }
    
  2. # 2 楼答案

    试试这个:

            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);
            }
          }
    
  3. # 3 楼答案

    这是因为您使用的button变量未在actionPerformed方法的范围内定义。Java变量有作用域,它们可以在花括号中定义。actionPerformed方法与growAndShrinkListener方法的花括号不同。固定代码:

    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");
        }
    }
    

    注意:不应覆盖构造函数中参数的内容。您得到的参数不是指向被调用方变量的“指针”,而是对该变量的简单引用。如果覆盖,则内容将丢失,被调用方将不知道这一点