我正在写一个程序而GUi Class(主类)被重载了。
我想知道是否有可能将课程分成几个班级。 例如,我制作了一类圣徒。
主要问题是我是否可以将所有接口代码保存在一个类中(我将添加和初始化JTetxFields,JButton和其他Jobjects),然后在另一个类中使用它们。
例如: 在接口类中将有:
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并在主类中使用它。
答案 0 :(得分:4)
您的主要问题 - 您是否可以创建一个类组件,该组件是GUI组件的存储库并在其他地方使用它们,答案是肯定的,您可以,但我不认为你应该,至少不是简单的组件。您应该将JTextFields,JButton保存在使用它们的GUI类中,但是GUI的任何主要子部分,例如包含组件且具有独特功能的JPanel,都可以放在自己的类中。
更重要的是将程序的不同功能部分分开,特别是你应该尝试将逻辑或模型分离出来#34;来自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();
}
});
}
}
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);
}
}