Я создаю гораздо более крупную программу, и я попробовал несколько методов (все из которых работают), но мне нравится этот метод в настоящее время, хотя я не знаю, представляют ли некоторые его аспекты плохую практику программирования , Код, используемый в этом примере, просто для того, чтобы передать идею, не вставляя весь код.
Этот код (вставленный ниже) создает новый объект ClassMain с меткой и статическим методом для редактирования метки. ClassEditor создается из ClassMain, который возвращает кнопку.
Теперь вот где я хочу знать, если это плохая практика, у меня есть действие над кнопкой, которое при нажатии вызывает статический метод в 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);
}
}
ClassEditor:
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);
}
}
Большое спасибо всем, кто может мне помочь, очень признателен. Просто пытаюсь узнать и понять хорошие практики и почему они работают.