Java 将GUI拆分为几个类
我正在编写一个程序,GUi类main类重载了 我想知道是否有可能把这个班分成几个班。 例如,我制作了一个Constants类 主要的问题是,我是否可以将所有接口代码保存在一个类中,在这个类中添加并初始化JTetxFields、JButton和其他Jobject,然后在另一个类中使用它们 例如: 在接口类中,将有: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"); 在主要课堂上,我会这样做:
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);
}
}