JAVA 按姓氏分类的电话薄(界面、方法的实现和讲解)

  • 老师又双叒叕留了大作业了,这次这个比较大,废了不少劲也掉了不少头发,虽然实现的方方有点笨,没有其他同学的漂亮,但还是写出来了,这个过程真是心酸有心累,还赶上期末,叫人抓狂,有两天晚上废了一晚上去找bug,还是没有找到,最后我舍友十分钟给找出来的.
  • 当晚破防,我是伞兵,我是伞兵,我是伞兵。重要的事情说三遍。
  • 如果要是想看实现的结果,直接将三个类CV一下到 idea 上就能编辑出来了,后边的就可以不看了,如果想看个个功能的实现方法和我遇到问题怎么解决的可以看后边,跳过代码,我看代码我也烦。
  • 废话不在多说了,直接给大家分析一下代码和我其中遇到的问题和解决的方法。希望可以帮助到大家
  • 我是先写的一个界面类布置好界面,在实现的各个功能,都写到界面类的构造方法中去了,最后直接在主类中new一个对象,显示出来。
  • 第一个类JavaPhone 界面类,里边有一些实现功能都写一起了。
package Java;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class JavaPhone extends JFrame implements ActionListener, MouseListener, ListSelectionListener {
   

    JButton jButton4;
    JPanel jPanelLeft, jPanelRight, jPanelUp, jPanelDown, jPanel1, jPanel2;//四个Jpanel面板来划分
    JSplitPane jSplitPaneLR, jSplitPaneUD; // 分割窗口
    JTable jTable;
    JScrollPane jScrollPane;
    DefaultTableModel defaultTableModel; // 表格的模板
    JTextField jTextField1, jTextField2, jTextField3;
    JRadioButton man, woman;
    String sex;
    JButton addButten, deleteButton, openButton, saveButton;
    JComboBox<String> jComboBox, jComboBox2;  // 下拉列表框
    JCheckBox jCheckBox;
    JComboBox<Integer> jComboBoxNum;
    JList<String> jList; // 左侧姓氏的列表框
    private String string1 = "姓名", string2 = "电话号码", string3 = "关系";
    DefaultListModel<String> defaultListModel; // 列表的模板
    ButtonGroup buttonGroup;
    String[][] myfriends = new String[1024][4]; // 二维数组分别 存放 姓名 性别 电话号码, 关系
    String[] surname = new String[1024]; // 用来存放姓氏
    String string_name = "Text.txt";
    int count = 0; // 记录缓存对象的个数
    int count1 = 0; // 用来记录数组中不重复的姓氏的个数 和数组中的下标差一要用另外一个变量来记录数组的下标
    Founction founction;
    public JavaPhone() {
   
        super("My电话薄");
// TODO Auto-generated constructor stub
        founction = new Founction(); // 新建一个功能类的对象,用来调用功能类的方法。
        this.setSize(900, 350); // 设置窗口的大小
        this.setLocationRelativeTo(null);
        this.setResizable(false);

        jButton4 = new JButton("确定");

        jPanelLeft = new JPanel(); // 左侧面板
        jPanelLeft.setBackground(Color.WHITE);
        jPanelLeft.setSize(200, 500); //由于在使用JSplitPane的时候 分割的位置就确定了所以就不用在设置大小了 下同

        jPanelRight = new JPanel(); // 右侧面板
//jPanelRight.setSize(800,500);
        jPanelRight.setBackground(Color.WHITE);

// 新建一个分割窗口 并且将左右两侧的面板添加进去
        jSplitPaneLR = new JSplitPane(1, jPanelLeft, jPanelRight);
        jSplitPaneLR.setDividerLocation(130); // 左右的分割距离

        this.getContentPane().add(jSplitPaneLR);

        jPanelRight.setLayout(new BorderLayout());
        jPanelUp = new JPanel();
        jPanelUp.setBackground(Color.WHITE);
//jPanelUp.setSize(800, 250); 由于在使用JSplitPane的时候 分割的位置就确定了所以就不用在设置大小了
        jPanelDown = new JPanel();
        jPanelDown.setBackground(Color.WHITE);
//jPanelDown.setSize(800, 250);

        jSplitPaneUD = new JSplitPane(0, jPanelUp, jPanelDown);
        jSplitPaneUD.setDividerLocation(200); // 上下分割的位置大小
        jPanelRight.add(jSplitPaneUD);

        String[] headers = {
   "姓名", "性别", "电话号码", "关系"};
        defaultTableModel = new DefaultTableModel(headers, 0) {
    // 重写一个方法使列表不可以被编辑
            public boolean isCellEditable(int row, int column) {
   
                return false;
            }
        };
        jTable = new JTable(defaultTableModel); // 新建一个表格
        jTable.getTableHeader().setReorderingAllowed(false); // 设置Jtable模板不能改变位置顺序
        jTable.getTableHeader().setResizingAllowed(false); // 不能改变Jtable的大小
        jScrollPane = new JScrollPane(jTable); // 将Jtable 添加到滚动面板中去才能使表格的表头显示出来,这里叫做隐式显示
        jScrollPane.setPreferredSize(new Dimension(730, 200));// 设置JScorllPanel 的初始大小
        jPanelUp.add(jScrollPane);

        jPanelDown.setLayout(new FlowLayout());
// 添加面板
        jPanel1 = new JPanel();
        jPanel1.setLayout(new FlowLayout(0));
        jPanel1.setBackground(Color.WHITE);
        jPanel1.setSize(1000, 50); // 设置Jpanel1的大小
        jPanelDown.add(jPanel1);

        JLabel jLabel = new JLabel("My Friends");
        jPanel1.add(jLabel);
        jTextField1 = new JTextField(15);
        jTextField1.setText(string1);
        jTextField1.setForeground(Color.GRAY);
        jTextField1.addFocusListener(new FocusListener() {
   
            @Override
            public void focusLost(FocusEvent e) {
   
// TODO Auto-generated method stub
                if (jTextField1.getText().equals("") == true) {
   
                    jTextField1.setText(string1);
                }
            }

            @Override
            public void focusGained(FocusEvent e) {
   
// TODO Auto-generated method stub

                if (jTextField1.getText().equals(string1) == true) {
   
                    jTextField1.setText("");
                }
            }
        });
        jPanel1.add(jTextField1);

        man = new JRadioButton("男");
        man.setSelected(true);
        man.setBackground(Color.white);
        woman = new JRadioButton("女");
        woman.setBackground(Color.white);
        buttonGroup = new ButtonGroup();
        buttonGroup.add(man);
        buttonGroup.add(woman);
        jPanel1.add(man);
        jPanel1.add(woman);

        jTextField2 = new JTextField(15);
        jTextField2.setText(string2);
        jTextField2.setForeground(Color.GRAY);
        jTextField2.addFocusListener(new FocusListener() {
   

            @Override
            public void focusLost(FocusEvent e) {
   
// TODO Auto-generated method stub
                if (jTextField2.getText().equals("") == true) {
   
                    jTextField2.setText(string2);
                }
            }

            @Override
            public void focusGained(FocusEvent e) {
   
// TODO Auto-generated method stub

                if (jTextField2.getText().equals(string2) == true) {
   
                    jTextField2.setText("");
                }
            }
        });
        jPanel1.add(jTextField2);

        jTextField3 = new JTextField(15);
        jTextField3.setText(string3);
        jTextField3.setForeground(Color.GRAY);
        jTextField3.addFocusListener(new FocusListener(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值