java - 数据未出现在 JTable 中

标签 java swing jtable

我是 Jtable 的新手,我需要一些帮助。我想编写以下代码来显示表中队列的数据

问题:数据没有出现在表格中

我不知道出了什么问题!!

我需要帮助,请

源代码:

//类(class)学生

public class student {
    int id,age;
    String fn,ln;

    public student(int id,String fn,String ln,int age){
        this.age = age;
        this.id = id;
        this.fn = fn;
        this.ln = ln;
    }
}

//类节点

public class node {
    student info;
    node link;
    public node(student st,node next){
        this.info = info;
        this.link = link;
    }

}

//类队列

import javax.swing.*;

public class Queue{
    node front ,rear;
    int length;

    public void enqueue( student x){
        node newnode=new node(x,null);
        if(front==null)
            front=rear=newnode;
        else{
            rear.link=newnode;
            rear=newnode;
        }length++;
    }


    public student dequeue(){
        student temp=front.info;
        if(front==null && rear==null){
            throw new RuntimeException("empty");
        }else{

            front=front.link;
            if(front==null)
            rear=null;

            length--;
        }return temp;
    }


    public String[][] getData(){
            Queue x= new Queue();
            x.front= front;
            x.rear = rear;
            String s[][] = new String[x.length][4];
        if(x.front==null){
        JOptionPane.showMessageDialog(null,"the Queue is empty,you must add new student befor");    
        }else{

            student tmp;
            for(int i=0;i<x.length;i++){

                try{
                tmp = x.dequeue();
                s[i][0] = tmp.id + " ";
                s[i][1] = tmp.fn;
                s[i][2] = tmp.ln;
                s[i][3] = tmp.age + " ";

                }catch(Exception e){
                System.out.println("Exception from getData");
                }   
            }
        }
        return s;
    }

}

//类程序

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class program extends JFrame implements ActionListener{

    Container c;

    JTextField txtID,txtFN,txtLN,txtAge;
    JLabel lblTitle,lblID,lblFN,lblLN,lblAge;
    JButton btnAdd,btnUpdate,btnDelet,btnPrint,btnSort,btnRefresh,btnCancel;
    JTable table;

    String data[][];
    Queue q;

    public program(){
        c = getContentPane();
        setTitle(" Student Applicaion ");
        c.setLayout(null);
        q = new Queue();

        // add lbl
        lblTitle =  new JLabel("ADD NEW STUDENT");
        lblTitle.setFont(new Font ("Helvetica", Font.PLAIN, 20));
        lblTitle.setBounds(50,20,200,20);
        c.add(lblTitle);


        lblID =  new JLabel("ID");
        lblID.setBounds(50,50,70,20);
        c.add(lblID);

        lblFN =  new JLabel("First Name");
        lblFN.setBounds(50,80,70,20);
        c.add(lblFN);

        lblLN =  new JLabel("Last Name");
        lblLN.setBounds(50,110,70,20);
        c.add(lblLN);

        lblAge =  new JLabel("Age");
        lblAge.setBounds(50,140,70,20);
        c.add(lblAge);

        // add txt
        txtID = new JTextField();
        txtID.setBounds(130,50,120,20);
        c.add(txtID);

        txtFN = new JTextField();
        txtFN.setBounds(130,80,120,20);
        c.add(txtFN);

        txtLN = new JTextField();
        txtLN.setBounds(130,110,120,20);
        c.add(txtLN);

        txtAge = new JTextField();
        txtAge.setBounds(130,140,120,20);
        c.add(txtAge);

        // add btn
        btnAdd = new JButton("Add");
        btnAdd.setBounds(90,180,70,25);
        c.add(btnAdd);

        btnRefresh = new JButton("Refresh");
        btnRefresh.setBounds(165,180,80,25);
        c.add(btnRefresh);



        btnUpdate = new JButton("Update");
        btnUpdate.setBounds(300,50,100,20);
        c.add(btnUpdate);

        btnDelet = new JButton("Delet");
        btnDelet.setBounds(300,80,100,20);
        c.add(btnDelet);

        btnPrint = new JButton("Print");
        btnPrint.setBounds(300,110,100,20);
        c.add(btnPrint);

        btnSort = new JButton("Sort");
        btnSort.setBounds(300,140,100,20);
        c.add(btnSort);

        btnCancel= new JButton("Cancel");
        btnCancel.setBounds(355,435,80,25);
        c.add(btnCancel);

        // add table
    //  print();


        btnAdd.addActionListener(this);
        btnUpdate.addActionListener(this);
        btnDelet.addActionListener(this);
        btnPrint.addActionListener(this);
        btnSort.addActionListener(this);
        btnRefresh.addActionListener(this);
        btnCancel.addActionListener(this);

        setSize(450, 500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);    
        setVisible(true);
    }

      public void actionPerformed(ActionEvent e){
        if(e.getSource() == btnCancel)
            System.exit(0);
        else if(e.getSource() ==  btnRefresh){
            txtAge.setText("");
            txtFN.setText("");
            txtID.setText("");
            txtLN.setText("");
        }
        else if(e.getSource() == btnAdd){
            if(isThreeDigit(txtID.getText().trim()) == false || isNumber(txtID.getText().trim()) == false)
                 JOptionPane.showMessageDialog(null,"you entered invalid ID");
            else if(isCapital(txtFN.getText().trim()) == false)
                JOptionPane.showMessageDialog(null,"you must begin First name with capital Character");
            else if(!isString(txtFN.getText().trim()) || !(isString(txtLN.getText().trim())))
                JOptionPane.showMessageDialog(null,"You can't enter number on your name");
            else if(checkAge(txtAge.getText().trim()) == false) 
                JOptionPane.showMessageDialog(null,"You must enter real age in numbers format");
            else{

                student st = new student(Integer.parseInt(txtID.getText().trim()),txtFN.getText(),
                txtLN.getText(),Integer.parseInt(txtAge.getText().trim())); 
                q.enqueue(st);


            //  print();

            }
        }
        else if(e.getSource() == btnPrint){
            print();

        }

      }

      public void print(){
            String col[] = {"ID","FName","LName","Age"};
            data = q.getData();
            table = new JTable(data,col);
        //  table.editingStopped(ChangeEvent e) ;
            JScrollPane scrollPane = new JScrollPane(table);
            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollPane.setBounds(10,230,420,200);
            c.add(scrollPane);


      }
//~~~~~~~~~~~~ Constraints

    public boolean isThreeDigit(String id){
        if(id.length() <= 3)
            return true;


        return false;
    }
    public boolean checkAge(String age){

            if(!isNumber(age) || Integer.parseInt(age) > 90 || Integer.parseInt(age) < 6 )
                return false;

                return true;
    }
        public boolean isNumber(String id){

            for(int i=0;i<id.length();i++){
            char c=id.charAt(i);
            if(c>'9'|| c<'0') 
                return false; 
                }
                return true;
        }
    public boolean isString(String id){

        for(int i=0;i<id.length();i++){
            char c=id.charAt(i);
            if(c<='9'|| c<='0') 
                return false;
                }
                return true;

    }

    public boolean isCapital(String FN){
        char c=FN.charAt(0);
        if(c>='A'&& c<='Z')
        return true;

        return false;
    }


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

最佳答案

有两件事:

  1. 请使用大写字母作为类名的开头

  2. 自定义 TableModel 可能是个好主意。不要从头开始实现 TableModel,而是扩展 AbstractTableModel,因为它会处理所有事件和监听器方面,并且会为您节省大量时间。

关于java - 数据未出现在 JTable 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1846863/

相关文章:

java - 静态 block 会在没有 main 方法的情况下执行吗?

java - hibernate 外键未在 SaveOrUpdate 上更新

java - Java.Swing 是否有相当于 AS3 的 ADDED_TO_STAGE 事件?

Java 通过 HashMap 从 Object[][] 返回 int

java - 如何: JTable look and feel like Windows 7 Details View or Vuze table

java - 在我的 JTable 中触发更改时,最后一个 JCheckBox 保持切换状态

java - spring hibernate 自动接线 - 在自动接线 sessionFactory 上获取 NPE - httpinvoker 远程处理项目

java - 如何使用 Java Html 类删除包含内容的特定 html 类

java - 棋盘按钮的背景未设置为黑色

java - 按照 MVC 模式在 Java 中实现 JFileChooser