Java 将GUI拆分为几个类

Java 将GUI拆分为几个类,java,swing,user-interface,split,Java,Swing,User Interface,Split,我正在编写一个程序,GUi类main类重载了 我想知道是否有可能把这个班分成几个班。 例如,我制作了一个Constants类 主要的问题是,我是否可以将所有接口代码保存在一个类中,在这个类中添加并初始化JTetxFields、JButton和其他Jobject,然后在另一个类中使用它们 例如: 在接口类中,将有: JTextField field = new JTextField(12); JButton button = new JButton("Click"); 在主要课堂上,我会这样做:

我正在编写一个程序,GUi类main类重载了

我想知道是否有可能把这个班分成几个班。 例如,我制作了一个Constants类

主要的问题是,我是否可以将所有接口代码保存在一个类中,在这个类中添加并初始化JTetxFields、JButton和其他Jobject,然后在另一个类中使用它们

例如: 在接口类中,将有:

JTextField field = new JTextField(12);
JButton button = new JButton("Click");
在主要课堂上,我会这样做:

add(field);
   add(button);
   button.addActionListener(this);

 public void actionPerformed(ActionEvent e) {
    if(e.getSource==button){
         field.setVisible(false);
} 

如果可以创建新的JFrame,那么请告诉我如何创建新的Frame并在main类中使用它。

你的主要问题-你能创建一个GUI组件存储库的类并在其他地方使用它们吗?答案是可以的,但我认为你不应该,至少对于简单的组件不应该。您应该在使用JTextFields和jButton的GUI类中保留JTextFields和jButton,但GUI的任何主要子部分,例如包含组件并具有独特功能的JPanel,都可以放在自己的类中

更重要的是分离出程序的不同功能部分,特别是您应该尝试将程序的逻辑或模型部分与GUI或视图部分分离。你如何做到这一点的细节将取决于你的计划和整体问题的细节

例如:

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

public class SeparateClasses {
    private static void createAndShowGui() {
        SeparateClassView mainPanel = new SeparateClassView();
        new SeparateClassControl(mainPanel);

        JFrame frame = new JFrame("GUI");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}

你的主要问题是——你能创建一个类作为GUI组件的存储库并在其他地方使用它们吗?答案是可以的,但我认为你不应该,至少对于简单的组件不应该。您应该在使用JTextFields和jButton的GUI类中保留JTextFields和jButton,但GUI的任何主要子部分,例如包含组件并具有独特功能的JPanel,都可以放在自己的类中

更重要的是分离出程序的不同功能部分,特别是您应该尝试将程序的逻辑或模型部分与GUI或视图部分分离。你如何做到这一点的细节将取决于你的计划和整体问题的细节

例如:

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

public class SeparateClasses {
    private static void createAndShowGui() {
        SeparateClassView mainPanel = new SeparateClassView();
        new SeparateClassControl(mainPanel);

        JFrame frame = new JFrame("GUI");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }
}

您可以而且应该将大型类拆分为较小的类,但是关于如何拆分的细节将取决于您当前代码的细节,而我们对此知之甚少。最好是首先尝试沿着M-V-C或模型视图控制器线拆分。您可以也应该将大型类拆分为较小的类,但如何拆分的详细信息将取决于您当前代码的详细信息,而我们对此知之甚少。最好先尝试沿M-V-C或模型视图控制器线拆分。
public class SeparateClassControl implements ActionListener {
    private SeparateClassView view;

    public SeparateClassControl(SeparateClassView view) {
        this.view = view;
        view.addButtonListener(this);
    }



    @Override
    public void actionPerformed(ActionEvent e) {
        String text1 = view.getField1Text();
        String text2 = view.getField2Text();
        boolean result = SeparateClassModel.stringsEquivalent(text1, text2);
        view.setResult(result);
    }
}
public class SeparateClassModel {
    public static boolean stringsEquivalent(String text1, String text2) {
        return text1.equalsIgnoreCase(text2);
    }
}