Вы заставляете своего слушателя действия общаться с вашим GUI, используя шаблон модель / вид / контроллер . Много людей сказали так же. Я собираюсь показать вам на практике, как вы разделяете свой код на модель, представление и контроллер.
Я старался не слишком сильно изменять ваш код. Честно говоря, компоновка пружины, на мой взгляд, бесполезна.
Во всяком случае, вот GUI.
![enter image description here](https://i.stack.imgur.com/3jpnk.png)
Вот изменения, которые я сделал, без определенного порядка.
Я создал класс Lab02Model и переместил все ваши вычисления в этот класс.
Я создал Lab02Listener и переместил код слушателя действия в этот класс.
Я запустил ваш GUI, вызвав метод invingLater SwingUtilities. Это гарантирует, что ваш GUI создан и выполнен в потоке диспетчеризации событий.
Я использовал JFrame. Нет необходимости расширять компонент Swing, если вы не собираетесь переопределять один из методов компонента.
Я переместил большинство ваших определений полей в конструктор Lab02. Поля класса полей создаются только в том случае, если на них нужно ссылаться более чем в одном месте в классе.
Я добавил множество методов получения, чтобы один класс мог получать значения из другого класса. Обратите внимание на эти методы. Так вы общаетесь между классами.
В любом случае, вот мой код.
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.SwingUtilities;
public class Lab02 {
private JLabel lblTheSum = new JLabel("");
private JLabel lblTheReverse = new JLabel("");
private JLabel lblTheArray = new JLabel("");
private JTextField tfInput = new JTextField(5);
public Lab02() {
JFrame frame = new JFrame("Lab02");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container content = frame.getContentPane();
SpringLayout layout = new SpringLayout();
JLabel lblNum = new JLabel("Enter a 3-digit number:");
JLabel lblSum = new JLabel("Sum:");
JLabel lblReverse = new JLabel("Reverse:");
JLabel lblArray = new JLabel("Array:");
JLabel lblTextColor = new JLabel("Text color:");
JButton btnComp = new JButton("Compute");
content.setLayout(layout);
content.add(lblNum);
layout.putConstraint(SpringLayout.NORTH, lblNum, 25, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblNum, 25, SpringLayout.WEST, content);
content.add(lblSum);
layout.putConstraint(SpringLayout.NORTH, lblSum, 60, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblSum, 25, SpringLayout.WEST, content);
content.add(lblReverse);
layout.putConstraint(SpringLayout.NORTH, lblReverse, 95, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblReverse, 25, SpringLayout.WEST, content);
content.add(lblArray);
layout.putConstraint(SpringLayout.NORTH, lblArray, 130, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblArray, 25, SpringLayout.WEST, content);
content.add(lblTextColor);
layout.putConstraint(SpringLayout.NORTH, lblTextColor, 165, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblTextColor, 25, SpringLayout.WEST, content);
content.add(lblTheSum);
layout.putConstraint(SpringLayout.NORTH, lblTheSum, 60, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblTheSum, 175, SpringLayout.WEST, content);
content.add(lblTheReverse);
layout.putConstraint(SpringLayout.NORTH, lblTheReverse, 95, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblTheReverse, 175, SpringLayout.WEST, content);
content.add(lblTheArray);
layout.putConstraint(SpringLayout.NORTH, lblTheArray, 130, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, lblTheArray, 175, SpringLayout.WEST, content);
content.add(btnComp);
layout.putConstraint(SpringLayout.NORTH, btnComp, 200, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, btnComp, 150, SpringLayout.WEST, content);
content.add(tfInput);
layout.putConstraint(SpringLayout.NORTH, tfInput, 25, SpringLayout.NORTH, content);
layout.putConstraint(SpringLayout.WEST, tfInput, 175, SpringLayout.WEST, content);
Lab02Model lab02Model = new Lab02Model();
btnComp.addActionListener(new Lab02Listener(this, lab02Model));
frame.setSize(400, 300);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public void updateGUI(String sumText, String reverseText, int[] array) {
lblTheSum.setText(sumText);
lblTheReverse.setText(reverseText);
lblTheArray.setText(Arrays.toString(array));
}
public JTextField getTfInput() {
return tfInput;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Lab02();
}
});
}
public class Lab02Listener implements ActionListener {
private Lab02 lab02;
private Lab02Model lab02Model;
public Lab02Listener(Lab02 lab02, Lab02Model lab02Model) {
this.lab02 = lab02;
this.lab02Model = lab02Model;
}
@Override
public void actionPerformed(ActionEvent e) {
int num = Integer.parseInt(lab02.getTfInput().getText());
lab02Model.calculateValues(num);
lab02.updateGUI(lab02Model.getDigitSum(), lab02Model.getReverseOrder(), lab02Model.getNumArray());
}
}
public class Lab02Model {
private int[] numArray;
private String reverseOrder;
private String digitSum;
public void calculateValues(int num) {
this.digitSum = sumTheDigits(num);
this.reverseOrder = reverseTheOrder(num);
this.numArray = createArrayFrom(num);
}
public int[] getNumArray() {
return numArray;
}
public String getReverseOrder() {
return reverseOrder;
}
public String getDigitSum() {
return digitSum;
}
public String sumTheDigits(int num) {
int one;
int two;
int three;
int sum;
one = num % 10;
two = (num / 10) % 10;
three = num / 100;
sum = one + two + three;
String strSum = String.valueOf(sum);
return strSum;
}
public String reverseTheOrder(int num) {
int first;
int second;
int third;
first = num / 100;
second = (num / 10) % 10;
third = num % 10;
StringBuffer s = new StringBuffer(3);
s.append(third);
s.append(second);
s.append(first);
String reverse = s.toString();
return reverse;
}
public int[] createArrayFrom(int num) {
int first;
int second;
int third;
int[] array = new int[3];
first = num / 100;
second = (num / 10) % 10;
third = num % 10;
array[0] = first;
array[1] = second;
array[2] = third;
return array;
}
}
}