我正在构建一个更大的程序,并且尝试了几种方法(所有方法都可以工作),但是我目前很喜欢这种方法,尽管我不知道它的某些方面是否代表不良的编程习惯。本示例中使用的代码仅是在不粘贴整个代码的情况下传达想法。

这段代码(粘贴在下面)创建了一个带有标签和用于编辑标签的静态方法的新ClassMain对象。从ClassMain实例化ClassEditor,它返回一个按钮。

现在,在这里我想知道这是否是不好的做法,我对按钮进行了操作,单击该按钮后,将在ClassMain中调用静态方法并将标签设置为随机数。我想知道这是否是不好的做法,是因为我实际上没有从ClassMain对象的直接实例中调用该方法,我只是这样做:ClassMain.setLabel("");。我不确定这到底是什么。我有一个ClassMain实例化,但是如果我有多个实例化,它将仍然有效吗?那么如何通过这种方式而不是使用引用变量来编辑已创建对象的各个方面?如果我有多个课程,会不会产生问题?

很抱歉,如果这些问题很混乱,很难确切地提出。我提供了以下代码,因此您可以了解我的意思。

PS:关于是否可能涉及ClassMain的多个对象的问题,我在两个窗口中创建了另一个按钮,两个按钮都只更新了一个标签。为什么是这样?这是否意味着如果用于一个实例,这不是坏习惯,但如果用于更多实例,则是不好的习惯?我希望有人可以帮助我解决这些问题!

ClassMain:

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;


public class ClassMain extends JFrame {

    private static JLabel l;

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

    public ClassMain() {
        super("This is my app");
        setSize(450,80);
        setLayout(new GridLayout(0,2));
        l = new JLabel("Hi");

        ClassEditor ce = new ClassEditor();

        add(l);
        add(ce.getButton());

        setVisible(true);
    }

    public static void setLabel(String stringA) {
        l.setText(stringA);
    }

}


类编辑器:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;


public class ClassEditor implements ActionListener {

    public ClassEditor() {
        ClassMain.setLabel("Click the button for a random number!");
    }

    public JButton getButton() {
        JButton b = new JButton("Click me!");
        b.addActionListener(this);
        return b;
    }

    public void actionPerformed(ActionEvent arg0) {
        int i = (int) (Math.random()*10);
        ClassMain.setLabel("Random Number: "+i);
    }

}


非常感谢任何可以帮助我的人,非常感谢。只是尝试学习和理解良好做法以及它们为什么起作用。

最佳答案

我可能不会使用静态方法和变量,而只是像这样重写它(我也更改了名称-一个好的做法是,以所有人都知道这意味着什么的方式来命名所有东西):

ClassMain:

import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;


public class ClassMain extends JFrame {

    private JLabel label;

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

    public ClassMain() {
        super("This is my app");
        setSize(450,80);
        setLayout(new GridLayout(0,2));
        label = new JLabel("Hi");

        ClassEditor classEditor = new ClassEditor(this);

        add(label);
        add(classEditor.getButton());

        setVisible(true);
    }

    public void setLabel(String text) {
        label.setText(text);
    }

}


类编辑器:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;


public class ClassEditor implements ActionListener {

    private ClassMain classMain;

    public ClassEditor(ClassMain classMain) {
        this.classMain = classMain;
        classMain.setLabel("Click the button for a random number!");
    }

    public JButton getButton() {
        JButton button = new JButton("Click me!");
        button.addActionListener(this);
        return button;
    }

    public void actionPerformed(ActionEvent event) {
        int i = (int) (Math.random()*10);
        classMain.setLabel("Random Number: "+i);
    }

}

10-07 20:07