我试图学习一些关于带有摆动的GUI界面以及如何正确构造GUI程序的方法,至少当然要以最有效的方式,这取决于项目。
在此示例中,我尝试创建一个执行以下操作的简单程序。
我有一个包含2个按钮的Menu,按下每个按钮都会触发相应的 ActionListener 并创建新类的实例。
每个新类(其中两个的名称是: Journal , Seminar )都有自己的GUI代码,该文本由文本字段,按钮和其他挥杆组件。
注意::该程序的最终目的是对象可串行化以归档,因此现在忽略一些与之对应的代码。
该代码目前无法正常工作。
**问题:**
我在整个程序中遵循的方法是否正确?还是我应该找到另一种方法?
我应该学习哪些知识,以便我可以了解如何有效地构建此类应用程序?
如何进行当前工作?
这是我的第一篇文章,所以我尽力以可能的最佳方式提出这个问题,如果您需要更多信息,请告诉我。谢谢!*
非常感谢任何帮助。
菜单类
import javax.swing.*;
import java.awt.*;
import java.io.IOException;
public class Menu {
JFrame menu_frame;
JButton ergasia_periodiko_btn = new JButton();
JButton ergasia_sinedrio_btn = new JButton();
Menu() {
this.menu_frame = new JFrame();
this.menu_frame.setSize(400,100);
this.menu_frame.setTitle("Ereunitikos Katalogos");
this.menu_frame.add(ergasia_periodiko_btn);
this.menu_frame.add(ergasia_sinedrio_btn);
this.menu_frame.setLayout(new FlowLayout());
this.ergasia_periodiko_btn.setText("Periodika");
this.ergasia_sinedrio_btn.setText("Sinedria");
this.ergasia_periodiko_btn.addActionListener(e -> new Journal()); //Action Listener to Joyrnal
this.ergasia_sinedrio_btn.addActionListener(e -> {
try {
new Seminar();
} catch (IOException e1) {
e1.printStackTrace();
}
}); //Action Listener to Seminar
this.menu_frame.setLocationRelativeTo(null);
this.menu_frame.setVisible(true);
}
public static void main(String[] args)
{ new Menu(); }
}
期刊类
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Journal implements Serializable
{
Journal_GUI gui; //**Creating instance of journal gui inside here so i can run the gui code in the constructor**
String column_title;
List writers = new ArrayList(2);
String mag_title;
String numberOfPages;
String released_date;
String volume;
String exact_page;
Journal(){}
public void fillVars()
{
this.column_title = gui.column_title_tf.getText();
this.writers = Collections.singletonList(gui.writers_tf.getText());
this.mag_title = gui.mag_title_tf.getText();
this.numberOfPages = gui.numberOfPages_tf.getText();
this.released_date = gui.released_date_tf.getText();
this.volume = gui.volume_tf.getText();
this.exact_page = gui.exact_page_tf.getText();
}
public void insertP() {
fillVars();
// try {
// My_Serialization.serialization("fileToSavePeriodiko.txt", this.toString());
// }// catch (IOException e) {
// e.printStackTrace();
//}
}
public void searchP_byTitle(){}
public void searchP_byName(){}
@Override
public String toString() {
String value = "\n Periodiko column title : " + column_title + "\n writers : " + writers+ "\n Titlos magazine : " + mag_title
+ "\n Number of Pages : " + numberOfPages + "\n Released Date : " + released_date + "\n Volume : " + volume + "\n Exact Page : " + exact_page +"\n";
return value;
}
}
Journal Gui类
import javax.swing.*;
public class Journal_GUI extends Journal{
JFrame periodikoFrame;
JTextField column_title_tf;
JTextField writers_tf;
JTextField mag_title_tf;
JTextField numberOfPages_tf;
JTextField released_date_tf;
JTextField volume_tf;
JTextField exact_page_tf;
public Journal_GUI(){
initComponenets();
}
public void initComponenets() {
periodikoFrame = new JFrame("PERIODIKA");
periodikoFrame.setSize(500, 500);
JPanel panel = new JPanel();
BoxLayout boxlayout = new BoxLayout(panel, BoxLayout.Y_AXIS);
panel.setLayout(boxlayout);
column_title_tf = new JTextField("Column Title");
writers_tf = new JTextField("Writers");
mag_title_tf = new JTextField("Magazine's Title");
numberOfPages_tf = new JTextField("Number of Pages");
released_date_tf = new JTextField("Date of Release");
volume_tf = new JTextField("Volume");
exact_page_tf = new JTextField("Exact Page");
JButton search_mag_btn_byName = new JButton("Search By name");
JButton search_mag_btn_byTitle = new JButton("Search By Title");
JButton insert_mag_btn = new JButton("Insert article");
search_mag_btn_byName.addActionListener(e -> searchP_byName());
search_mag_btn_byTitle.addActionListener(e -> searchP_byTitle());
insert_mag_btn.addActionListener(e -> insertP());
panel.add(column_title_tf);
panel.add(writers_tf);
panel.add(mag_title_tf);
panel.add(numberOfPages_tf);
panel.add(released_date_tf);
panel.add(volume_tf);
panel.add(exact_page_tf);
panel.add(search_mag_btn_byName);
panel.add(search_mag_btn_byTitle);
panel.add(insert_mag_btn);
periodikoFrame.setLocationRelativeTo(null);
periodikoFrame.add(panel);
periodikoFrame.setVisible(true);
}
}
答案 0 :(得分:0)
这可能是正确的,但不是最容易理解和开发的
您应该查看https://en.wikipedia.org/wiki/SOLID,尤其是您的情况下的https://en.wikipedia.org/wiki/Dependency_inversion_principle#Model_View_Controller和https://en.wikipedia.org/wiki/Single_responsibility_principle。 这应该给您一些提示,提示如何有效地构建应用程序(包括此代码)。
您是要序列化对象到文件吗?如果是这种情况,请查看How to write and read java serialized objects into a file
答案 1 :(得分:0)
这只是一个建议,当我第一次开始使用Eclipse WindowsBuilder插件开发基于GUI的桌面应用程序时,它本身会生成代码,您所需要做的就是拖放所需的组件。甚至更好的是,您可以从NetBeans开始使用它,它具有相当不错的GUI内置工具包(拖放),使用它可以了解如何生成自动代码,并以此为基础来擅长在这里尝试做的事情。 >