我有一个swing类,其中包括一个声明为final的String变量str3和两个

由两个JButton b1实现的ActionListener接口

和b2,当按b1 JButton时,str3字符串采用一个值,

我的问题是如何使str3的值在整个课堂上得到改变

而是在第二个ActionListener接口中(而不是仅在第一个内部类中)。

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class mySwing extends JFrame {

    JButton b1, b2;

    public mySwing() {
        final String str3;
        JPanel panel = new JPanel();
        b1 = new JButton("please click me first");
        b2 = new JButton("please click me second");
        final JTextField txt = new JTextField("                            ");
        panel.add(txt);
        Container pane = getContentPane();
        panel.add(b1);
        panel.add(b2);
        pane.add(panel);
        str3 = new String();
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent acv) {
                String input = "HelloWorld";
                String str3 = new String(input.substring(0, 5));
                txt.setText(str3);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent acv) {
                txt.setText(str3);
            }
        });
        setVisible(true);
    }

    public static void main(String[] args) {
        new mySwing();
    }
}

最佳答案

只需将str3设为外部类mySwing的非最终实例变量即可。

顺便说一句,不要做类似new String(input.substring(0, 5))的事情,因为input.substring(0, 5)的结果是一个字符串,所以您无需创建另一个字符串。

根据您的代码:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class mySwing extends JFrame {

    JButton b1, b2;
    String str3="";

    public mySwing() {
        JPanel panel = new JPanel();
        b1 = new JButton("please click me first");
        b2 = new JButton("please click me second");
        final JTextField txt = new JTextField("                            ");
        panel.add(txt);
        Container pane = getContentPane();
        panel.add(b1);
        panel.add(b2);
        pane.add(panel);
        str3 = new String();
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent acv) {
                str3+=" (1)";
                txt.setText(str3);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent acv) {
              str3+=" (2)";
              txt.setText(str3);
            }
        });
        setVisible(true);
    }

    public static void main(String[] args) {
        new mySwing();
    }
}

10-06 12:50