Moncel 2022-12-10 15:45 采纳率: 86.7%
浏览 49
已结题

JAVASWING button刷新后被覆盖

点击户口信息后JTable的文字和JButton的按钮会消失,为什么,如何解决。



package FRAME;

import DB.DBOperation;
import DB.LinkDataBase;
import DB.PI;
import DB.RI;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;

public class Test extends JFrame implements ActionListener {

    int no = 0;
    int rno = 0;

    JMenuBar menubar;//菜单条
    JMenu menu;//菜单,为JMenuItem的子类,便于嵌套子菜单
    JMenuItem menuItem;//菜单项
    Icon icon=new ImageIcon("a.gif");//菜单上图标
    //成员数据
    JMenuBar menuBar;
    JMenu menuFruit;
    JMenuItem pInformation,rInformation;
    JMenu appleMenu;
    JMenuItem aPInformation,aRInformation;



    LinkedList<PI> pList = DBOperation.pQuery();
    LinkedList<RI> rList = DBOperation.rQuery();

    JPanel oP;

    public Test(int pno) {
        no = pno;
        rno = pList.get(pno-1).getRno();
        setTitle("农村人口管理系统--操作");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);
        setBounds(400, 150, 800, 500);

        iniNMenu();
        

        iniNOMenu();

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setVisible(true);
    }

    public void iniNOMenu() {
        JLabel j11 = new JLabel("姓名");
        j11.setBounds(100, 80, 50, 30);
        j11.setLocation(50,350);
        add(j11);
        JTextField t11 = new JTextField();
        t11.setBounds(150, 80, 100, 30);
        t11.setLocation(100,350);
        add(t11);

        JLabel j12 = new JLabel("身份证");
        j12.setBounds(100, 80, 50, 30);
        j12.setLocation(250,350);
        add(j12);
        JTextField t12 = new JTextField();
        t12.setBounds(150, 80, 100, 30);
        t12.setLocation(300,350);
        add(t12);

        JButton b1 = new JButton("添加");
        b1.setBounds(100, 200, 60, 30);
        b1.setLocation(450,350);
        add(b1);
        b1.addActionListener(this);

        JButton b2 = new JButton("修改身份证");
        b2.setBounds(100, 200, 120, 30);
        b2.setLocation(540,350);
        add(b2);
        b2.addActionListener(this);

        JButton b3 = new JButton("删除");
        b3.setBounds(100, 200, 60, 30);
        b3.setLocation(690,350);
        add(b3);
        b3.addActionListener(this);


    }

    public void iniNMenu(){
        menuBar = new JMenuBar();
        menuFruit = new JMenu("操作菜单");//创建一个菜单
        pInformation = new JMenuItem("个人信息");//创建一个菜单项
        rInformation = new JMenuItem("户口信息");//创建一个菜单项
        //增加监听器
        pInformation.addActionListener(this);
        rInformation.addActionListener(this);
        //向菜单中添加菜单项
        menuFruit.add(pInformation);//向菜单中添加菜单项
        menuFruit.add(rInformation);

        menuBar.add(menuFruit);//向菜单条中添加菜单
        //为实例窗口添加菜单
        this.setJMenuBar(menuBar);

    }

    public void nPTable(){

    }
    public void nRTable(){
        String [] index={"户口","户主","姓名","身份证","贫困等级"};

        Object [][] data=new Object[3][index.length];
        //3,向data中添加数据
        for (int i = 0,j = 0; i < 3; i++) {
                data[j][0]=1;
                data[j][1]="张三";
                data[j][2]="张三";
                data[j][3]="张三";
                data[j][4]="张三";
        }
        //4,创建一个默认的表格模型
        DefaultTableModel defaultModel = new DefaultTableModel(data, index);
        JTable table = new JTable(defaultModel);


        this.setContentPane(new JScrollPane(table));
    }
    public void mPTable(){
        String [] index={"编号","户口","姓名","性别","电话","住址","住所面积","工作地点"};
        Object [][] data=new Object[pList.size()][index.length];
        //3,向data中添加数据

        for (int i = 0; i < pList.size(); i++) {
            PI pi = pList.get(i);
            data[i][0]=pi.getPno();
            data[i][1]=pi.getRno();
            data[i][2]=pi.getPname();
            data[i][3]=pi.getSex();
            data[i][4]=pi.getPhonenum();
            data[i][5]=pi.getAddress();
            data[i][6]=pi.getHousearea();
            data[i][7]=pi.getWorkplace();
        }
        //4,创建一个默认的表格模型
        DefaultTableModel defaultModel = new DefaultTableModel(data, index);
        JTable table = new JTable(defaultModel);


        this.setContentPane(new JScrollPane(table));
    }
    public void mRTable(){
        String [] index={"户口","户主","身份证","贫困等级"};
        Object [][] data=new Object[rList.size()][index.length];
        //3,向data中添加数据

        for (int i = 0; i < rList.size(); i++) {
            RI ri = rList.get(i);
            data[i][0]=ri.getRno();
            data[i][1]=ri.getHeadname();
            data[i][2]=ri.getIdnum();
            data[i][3]=ri.getPovertylevel();

        }
        //4,创建一个默认的表格模型
        DefaultTableModel defaultModel = new DefaultTableModel(data, index);
        JTable table = new JTable(defaultModel);


        this.setContentPane(new JScrollPane(table));
    }

    public static void main(String[] args) {
        new Test(1);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == pInformation){
            nPTable();
        }
        if(e.getSource() == rInformation){

            nRTable();
            this.validate();
            iniNOMenu();

        }
        if(e.getSource() == aPInformation){
            mPTable();
        }
        if(e.getSource() == aRInformation){
            mRTable();
        }
    }
}

  • 写回答

2条回答 默认 最新

  • pzzhao 2022-12-10 16:52
    关注

    setContentPane相当于把主面板给覆盖了,这边给你添加了一个单独的table面板,在你代码的基础上改了下,我把数据库去掉,用固定数据测试是ok的,你看下

    
    package FRAME;
    import DB.DBOperation;
    import DB.LinkDataBase;
    import DB.PI;
    import DB.RI;
    import javax.swing.*;
    import javax.swing.table.DefaultTableModel;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.LinkedList;
    public class Test extends JFrame implements ActionListener {
        int no = 0;
        int rno = 0;
        JMenuBar menubar;//菜单条
        JMenu menu;//菜单,为JMenuItem的子类,便于嵌套子菜单
        JMenuItem menuItem;//菜单项
        Icon icon=new ImageIcon("a.gif");//菜单上图标
        //成员数据
        JMenuBar menuBar;
        JMenu menuFruit;
        JMenuItem pInformation,rInformation;
        JMenu appleMenu;
        JMenuItem aPInformation,aRInformation;
        LinkedList<PI> pList = DBOperation.pQuery();
        LinkedList<RI> rList = DBOperation.rQuery();
        JPanel oP;
        JPanel tP;
        public Test(int pno) {
            no = pno;
            rno = pList.get(pno-1).getRno();
            setTitle("农村人口管理系统--操作");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setLayout(null);
            setBounds(400, 150, 800, 500);
            iniNMenu();
            iniNOMenu();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
            tP = new JPanel();
            tP.setBounds(10, 10, 750, 400);
            tP.setLayout(new BorderLayout());
            add(tP);
        }
        public void iniNOMenu() {
            JLabel j11 = new JLabel("姓名");
            j11.setBounds(100, 80, 50, 30);
            j11.setLocation(50,350);
            add(j11);
            JTextField t11 = new JTextField();
            t11.setBounds(150, 80, 100, 30);
            t11.setLocation(100,350);
            add(t11);
            JLabel j12 = new JLabel("身份证");
            j12.setBounds(100, 80, 50, 30);
            j12.setLocation(250,350);
            add(j12);
            JTextField t12 = new JTextField();
            t12.setBounds(150, 80, 100, 30);
            t12.setLocation(300,350);
            add(t12);
            JButton b1 = new JButton("添加");
            b1.setBounds(100, 200, 60, 30);
            b1.setLocation(450,350);
            add(b1);
            b1.addActionListener(this);
            JButton b2 = new JButton("修改身份证");
            b2.setBounds(100, 200, 120, 30);
            b2.setLocation(540,350);
            add(b2);
            b2.addActionListener(this);
            JButton b3 = new JButton("删除");
            b3.setBounds(100, 200, 60, 30);
            b3.setLocation(690,350);
            add(b3);
            b3.addActionListener(this);
        }
        public void iniNMenu(){
            menuBar = new JMenuBar();
            menuFruit = new JMenu("操作菜单");//创建一个菜单
            pInformation = new JMenuItem("个人信息");//创建一个菜单项
            rInformation = new JMenuItem("户口信息");//创建一个菜单项
            //增加监听器
            pInformation.addActionListener(this);
            rInformation.addActionListener(this);
            //向菜单中添加菜单项
            menuFruit.add(pInformation);//向菜单中添加菜单项
            menuFruit.add(rInformation);
            menuBar.add(menuFruit);//向菜单条中添加菜单
            //为实例窗口添加菜单
            this.setJMenuBar(menuBar);
        }
        public void nPTable(){
        }
        public void nRTable(){
            String [] index={"户口","户主","姓名","身份证","贫困等级"};
            Object [][] data=new Object[3][index.length];
            //3,向data中添加数据
            for (int i = 0,j = 0; i < 3; i++) {
                data[j][0]=1;
                data[j][1]="张三";
                data[j][2]="张三";
                data[j][3]="张三";
                data[j][4]="张三";
            }
            //4,创建一个默认的表格模型
            DefaultTableModel defaultModel = new DefaultTableModel(data, index);
            JTable table = new JTable(defaultModel);
            tP.add(new JScrollPane(table), BorderLayout.NORTH);
        }
        public void mPTable(){
            String [] index={"编号","户口","姓名","性别","电话","住址","住所面积","工作地点"};
            Object [][] data=new Object[pList.size()][index.length];
            //3,向data中添加数据
            for (int i = 0; i < pList.size(); i++) {
                PI pi = pList.get(i);
                data[i][0]=pi.getPno();
                data[i][1]=pi.getRno();
                data[i][2]=pi.getPname();
                data[i][3]=pi.getSex();
                data[i][4]=pi.getPhonenum();
                data[i][5]=pi.getAddress();
                data[i][6]=pi.getHousearea();
                data[i][7]=pi.getWorkplace();
            }
            //4,创建一个默认的表格模型
            DefaultTableModel defaultModel = new DefaultTableModel(data, index);
            JTable table = new JTable(defaultModel);
            tP.add(new JScrollPane(table), BorderLayout.NORTH);
        }
        public void mRTable(){
            String [] index={"户口","户主","身份证","贫困等级"};
            Object [][] data=new Object[rList.size()][index.length];
            //3,向data中添加数据
            for (int i = 0; i < rList.size(); i++) {
                RI ri = rList.get(i);
                data[i][0]=ri.getRno();
                data[i][1]=ri.getHeadname();
                data[i][2]=ri.getIdnum();
                data[i][3]=ri.getPovertylevel();
            }
            //4,创建一个默认的表格模型
            DefaultTableModel defaultModel = new DefaultTableModel(data, index);
            JTable table = new JTable(defaultModel);
            tP.add(new JScrollPane(table), BorderLayout.NORTH);
        }
        public static void main(String[] args) {
            new Test(1);
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getSource() == pInformation){
                nPTable();
            }
            if(e.getSource() == rInformation){
                nRTable();
                this.validate();
                iniNOMenu();
            }
            if(e.getSource() == aPInformation){
                mPTable();
            }
            if(e.getSource() == aRInformation){
                mRTable();
            }
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月10日
  • 已采纳回答 12月10日
  • 创建了问题 12月10日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效