java - 将 GUI 分成几类

标签 java swing user-interface split

我正在编写一个程序,但 GUI 类(主类)重载了。

我想知道是否可以将类(class)分成几个类(class)。 例如,我制作了一类约束。

主要问题是我是否可以将所有接口(interface)代码保留在一个类中(我将在其中添加和初始化 JTetxFields、JButtons 和其他作业对象),然后在另一个类中使用它们。

例如: 在接口(interface)类中会有:

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 并在主类中使用它。

最佳答案

您的主要问题 -- 您能否创建一个类作为 GUI 组件的存储库并在其他地方使用它们,答案是肯定的,您可以,但我认为您不应该这样做,至少不是简单的组件。您应该将 JTextFields、JButton 保留在使用它们的 GUI 类中,但 GUI 的任何主要部分(例如包含组件并具有独特功能的 JPanel)都可以放在自己的类中。

更重要的是将程序的不同功能部分分开,尤其是您应该尝试将程序的逻辑或“模型”部分与 GUI 或“ View ”部分分开。您如何执行此操作的细节将取决于您的程序和总体问题的细节。

例如:

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();
            }
        });
    }
}

public class SeparateClassView extends JPanel {
    private JTextField field1 = new JTextField(12);
    private JTextField field2 = new JTextField(12);
    private JTextField resultField = new JTextField("false", 5);
    private JButton button = new JButton("Click");

    public SeparateClassView() {
        resultField.setEditable(false);
        resultField.setFocusable(false);

        add(new JLabel("Field 1:"));
        add(field1);
        add(new JLabel("Field 2:"));
        add(field2);

        add(button);

        add(new JLabel("Two texts equivalent?:"));
        add(resultField);

    }

    public void addButtonListener(ActionListener listener) {
        button.addActionListener(listener);
        field1.addActionListener(listener);
        field2.addActionListener(listener);
    }

    public String getField1Text() {
        return field1.getText();
    }

    public String getField2Text() {
        return field2.getText();
    }

    public void setField1Text(String text) {
        field1.setText(text);
    }

    public void setField2Text(String text) {
        field2.setText(text);
    }

    public void setResult(boolean result) {
        resultField.setText(String.valueOf(result));
    }
}

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);
    }
}

关于java - 将 GUI 分成几类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33845152/

相关文章:

iphone - 得到了[Not A Type class]:消息发送到释放实例错误?

ios - PSD 像素到 ios 点

java - 如何在java中将byte[]类型转换为Certificate类型?

java - JasperFillManager.fillReport 和 mongo?

iphone - iPhone 中的自定义联系人选择,就像短信/电子邮件应用程序一样

java - JTextArea问题

java - 需要帮助在 java 中调用 JButton 中的类

java - 我的世界模组设置错误

java - Eclipse 文本高亮显示

java - Jtable 未使用我的 Abstracttablemodel 进行更新