我开发了一个使用Java和internet作为参考的大学费用报告生成器应用程序,但是现在我需要你们的帮助,使它变得更加明显和坚固,因为我是Java Swing的新手。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileWriter;
public class College extends Frame {
JLabel l1, l2, l3, l4,
l5, l6, l7, l8,
l9, l10, l12, l13,
l14, l11, l15;
JTextField tf1, tf2, tf3,
tf4, tf5, tf6,
tf7, tf8, tf9,
tf10;
JTextArea area2, area1;
JRadioButton rb1, rb2, rb3,
rb4, rb5, rb6,
rb7;
JFileChooser f1;
// Default constructor to
// initialize the parameters
College()
{
l1 = new JLabel("Fee Report");
l1.setBounds(550, 100, 250, 20);
l2 = new JLabel(
"Name of the Student:");
l2.setBounds(50, 150, 250, 20);
tf1 = new JTextField();
tf1.setBounds(250, 150, 250, 20);
l3 = new JLabel(
"Name of the Father:");
l3.setBounds(50, 200, 250, 20);
tf2 = new JTextField();
tf2.setBounds(250, 200, 250, 20);
l4 = new JLabel("Roll Number:");
l4.setBounds(50, 250, 250, 20);
tf3 = new JTextField();
tf3.setBounds(250, 250, 250, 20);
l5 = new JLabel("Email ID:");
l5.setBounds(50, 300, 250, 20);
tf4 = new JTextField();
tf4.setBounds(250, 300, 250, 20);
l6 = new JLabel("Contact Number:");
l6.setBounds(50, 350, 250, 20);
tf5 = new JTextField();
tf5.setBounds(250, 350, 250, 20);
l7 = new JLabel("Address:");
l7.setBounds(50, 400, 250, 20);
area1 = new JTextArea();
area1.setBounds(250, 400, 250, 90);
l9 = new JLabel("Gender:");
l9.setBounds(50, 500, 250, 20);
JRadioButton r5
= new JRadioButton(" Male");
JRadioButton r6
= new JRadioButton(" Female");
r5.setBounds(250, 500, 100, 30);
r6.setBounds(350, 500, 100, 30);
ButtonGroup bg = new ButtonGroup();
bg.add(r5);
bg.add(r6);
l10 = new JLabel("Nationality:");
l10.setBounds(50, 550, 250, 20);
String nationality[]
= { "Indian","Other"};
final JComboBox cb3
= new JComboBox(nationality);
cb3.setBounds(250, 550, 250, 20);
l11 = new JLabel(
"Year of passing 10th");
l11.setBounds(50, 600, 250, 20);
String language[]
= { "2017","2016", "2015", "2014" ,"2013","2012"};
final JComboBox cb1
= new JComboBox(language);
cb1.setBounds(250, 600, 90, 20);
l12 = new JLabel(
"Year of passing 12th");
l12.setBounds(50, 650, 250, 20);
String languagess[]
= { "2020","2019", "2018", "2017","2016","2015" };
l13 = new JLabel(
"Percentage Secured in 10th:");
l13.setBounds(50, 700, 250, 20);
tf7 = new JTextField();
tf7.setBounds(250, 700, 250, 20);
l14 = new JLabel("Percentage Secured in 12th:");
l14.setBounds(50, 750, 250, 20);
tf8 = new JTextField();
tf8.setBounds(250, 750, 250, 20);
ImageIcon i2 = new ImageIcon("2.png");
JLabel l15
= new JLabel("", i2, JLabel.CENTER);
l15.setBounds(900, 50, 600, 200);
final JComboBox cb2
= new JComboBox(languagess);
cb2.setBounds(250, 650, 90, 20);
l8 = new JLabel(
"Groups Offered here are:");
l8.setBounds(800, 150, 250, 20);
rb1 = new JRadioButton("Engineering");
rb1.setBounds(550, 150, 100, 30);
rb2 = new JRadioButton("Arts");
rb2.setBounds(650, 150, 100, 30);
ButtonGroup bg1 = new ButtonGroup();
bg1.add(rb1);
bg1.add(rb2);
rb3 = new JRadioButton("Hosteller / Residential ");
rb3.setBounds(550, 200, 100, 30);
rb4 = new JRadioButton("Day-Scholar");
rb4.setBounds(650, 200, 120, 30);
ButtonGroup bg2 = new ButtonGroup();
bg2.add(rb3);
bg2.add(rb4);
String languages[]
= { "CSE", "ECE", "EEE","IT","AERO","MCT","AUTO","PROD","TEXT","CIVIL", "MECH" };
final JComboBox cb
= new JComboBox(languages);
cb.setBounds(800, 200, 90, 20);
final JLabel label
= new JLabel();
label.setBounds(600, 430, 500, 30);
JButton b = new JButton("Show");
b.setBounds(1000, 300, 80, 30);
final DefaultListModel<String> li1
= new DefaultListModel<>();
li1.addElement("CSE(2, 50, 000)");
li1.addElement("ECE(2, 50, 000)");
li1.addElement("EEE(2, 50, 000)");
li1.addElement("IT(2, 50, 000)");
li1.addElement("AERO(2, 50, 000)");
li1.addElement("MCT(3, 50, 000)");
li1.addElement("AUTO(3, 50, 000)");
li1.addElement("CHEMICAL(3, 50, 000)");
li1.addElement("BIOTECH(3, 50, 000)");
li1.addElement("CIVIL(3, 50, 000)");
li1.addElement("MECH(3, 50, 000)");
final JList<String> list1
= new JList<>(li1);
list1.setBounds(600, 300, 125, 125);
DefaultListModel<String> li2
= new DefaultListModel<>();
li2.addElement(
"2 SHARE(1, 50, 000)");
li2.addElement(
"3 SHARE(1, 40, 000)");
li2.addElement(
"5 SHARE(1, 20, 000)");
li2.addElement(
"8 SHARE(1, 10, 000)");
li2.addElement(
"BUS(40, 000)");
li2.addElement("SELF(0)");
final JList<String> list2
= new JList<>(li2);
list2.setBounds(
800, 300, 125, 125);
JButton Receipt
= new JButton("Generate Receipt");
Receipt.setBounds(600, 490, 150, 30);
JButton b2 = new JButton("Reset");
b2.setBounds(750, 490, 150, 30);
JButton Print = new JButton("Print");
Print.setBounds(900, 490, 150, 30);
area2 = new JTextArea();
area2.setBounds(600, 540, 450, 240);
add(l1);
add(l2);
add(l3);
add(l4);
add(l5);
add(l6);
add(l7);
add(l8);
add(l9);
add(l10);
add(l11);
add(l12);
add(l13);
add(l14);
add(tf1);
add(tf2);
add(tf3);
add(tf4);
add(tf5);
add(tf7);
add(tf8);
add(area1);
add(area2);
add(l15);
add(rb1);
add(rb2);
add(rb3);
add(rb4);
add(r5);
add(r6);
add(cb);
add(cb3);
add(cb1);
add(cb2);
add(list1);
add(list2);
add(b);
add(label);
add(Receipt);
add(b2);
add(Print);
b.addActionListener(new ActionListener() {
// Method to display the data
// entered in the text fields
public void actionPerformed(ActionEvent e)
{
String data = "";
if (list1.getSelectedIndex() != -1) {
data = "You had selected the Group:"
+ list1.getSelectedValue();
label.setText(data);
}
if (list2.getSelectedIndex() != -1) {
data += " and Hostel with the "
+ "facility of: ";
for (Object frame :
list2.getSelectedValues()) {
data += frame + " ";
}
}
label.setText(data);
}
});
// Reset the text fields
b2.addActionListener(
new ActionListener() {
public void actionPerformed(
ActionEvent e)
{
area2.setText("");
area1.setText(" ");
tf1.setText("");
tf2.setText("");
tf3.setText("");
tf4.setText("");
tf5.setText("");
tf6.setText(" ");
}
});
Print.addActionListener(
new ActionListener() {
public void actionPerformed(
ActionEvent e)
{
try {
area2.print();
}
catch (java.awt.print
.PrinterException a) {
System.err.format(
"NoPrinter Found",
a.getMessage());
}
}
});
Receipt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
area2.setText(
"--------------------"
+ "-----------XYZ EDUCATIONAL INSTITUTIONS----"
+ "--------------------"
+ "----------"
+ "---------\n");
area2.setText(area2.getText()
+ "Student Name: "
+ tf1.getText()
+ "\n");
area2.setText(area2.getText()
+ "Father's Name: "
+ tf2.getText()
+ "\n");
area2.setText(area2.getText()
+ "Register No : "
+ tf3.getText()
+ "\n");
area2.setText(area2.getText()
+ "Email ID: "
+ tf4.getText()
+ "\n");
area2.setText(area2.getText()
+ "Contact Number: "
+ tf5.getText()
+ "\n");
area2.setText(area2.getText()
+ "Department Chosen : "
+ cb.getSelectedItem()
.toString()
+ "\n");
if (rb1.isSelected()) {
area2.setText(area2.getText()
+ "Interested to join in: " + " Engineering "
+ "and Technology\n");
}
if (rb2.isSelected()) {
area2.setText(area2.getText()
+ "Interested to join in: "
+ "Arts and Sciences\n");
}
if (rb3.isSelected()) {
area2.setText(area2.getText()
+ "Wants to be a "
+ "Hosteller \n");
}
if (rb4.isSelected()) {
area2.setText(area2.getText()
+ "Wants to be a "
+ "Day Scholar \n");
}
area2.setText(area2.getText()
+ "Had chosen: "
+ list1.getSelectedValue()
.toString()
+ "\n");
area2.setText(area2.getText()
+ "Had chosen: "
+ list2.getSelectedValue()
.toString()
+ "\n");
int index2 = list2.getSelectedIndex();
area2.setText(area2.getText()+" "+" Total amount to be paid "+" will be informed to you using e-mail/post\n ");
if (e.getSource() == Receipt) {
try {
FileWriter fw
= new FileWriter(
"java.txt", true);
fw.write(area2.getText());
fw.close();
}
catch (Exception ae) {
System.out.println(ae);
}
}
JOptionPane.showMessageDialog(
area2, "Data stored in Server Successfully !");
};
});
addWindowListener(
new WindowAdapter() {
public void windowClosing(
WindowEvent we)
{
System.exit(0);
}
});
setSize(800, 800);
setLayout(null);
setVisible(true);
setBackground(Color.lightGray);
}
public static void main(String[] args)
{
new College();
}
}发布于 2020-07-21 14:10:41
这是:
l1.setBounds(550, 100, 250, 20);像这样的线条是不理想的。根据不同的窗口大小,绝对定位将无法缩放控件及其位置。在阅读关于布局的文章之后再考虑一下你的方法。与其设置边界,不如指定布局和边框宽度等。
没有理由储存这些:
JLabel l1, l2, l3, l4,
l5, l6, l7, l8,
l9, l10, l12, l13,
l14, l11, l15;作为班上的成员。应该在函数级别声明它们。当它们超出范围时,它们不会消失;Frame将保留对它们的引用,但您不必这样做。
特别是对于像f1这样的重要变量--但也可能是所有其他变量--您将希望给它一个更有意义的名称,比如fileChooser。
add与其一刀切地发布您的adds,我认为更容易理解的是重新安排这些内容,使它们在各自的控件声明后直接发生。
l1 = new JLabel("Fee Report");
l1.setBounds(550, 100, 250, 20);
add(l1);考虑到操作侦听器方法的长度,应该将这些方法的主体移到类上的方法,而不是在您创建的匿名ActionListener对象上。
发布于 2020-07-21 15:08:57
除了@Reinderien给出的有价值的技术提示之外,我还想评论一下您的代码结构。
在一个类中(甚至在该类的构造函数中),您正在做所有事情:
new JLabel()、setBounds()、add()等)addActionListener())print()、setText()等)我通常希望像您这样的应用程序至少分为两个主要部分:
Student、Group、Course、Year。不应该有任何用户界面元素(没有来自javax.swing、java.awt、System.out等)。在那里,您应该找到描述学生、组等的字段,以及必要的操作(例如,在类Group中,一个方法,如add(Student student),修改组的字段,现在包含多一个学生)。如果您以这种方式组织代码,您将获得一些好处:
Group商务类中找到它。没有必要跳过Swing代码,在其中获取JLabel内容并向其他JLabels添加文本。UI类也是如此。他们只是定义了如何与用户交互,例如,当用户按下这个或那个按钮时,您想要将一个学生添加到一个组中,而不管它是如何在内部工作的。这是业务逻辑的责任。https://codereview.stackexchange.com/questions/245796
复制相似问题