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(“单击我以增大正方形”)代码>可能不起作用,因此请参阅答案以了解更好的代码结构。