有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何显示JTable?

我已经写了一些类似这样的代码,但是运行之后,表没有显示出来。请帮帮我,我是新来的爪哇人。 这是我的代码,完整的代码

import java.awt.Dimension;    
import java.io.BufferedReader;    
import java.io.FileReader;    
import java.io.FileWriter;    
import java.io.IOException;    
import java.io.PrintWriter;    
import java.io.RandomAccessFile;    
import java.util.Vector;    
import javax.swing.JButton;    
import javax.swing.JFrame;    
import javax.swing.JLabel;    
import javax.swing.JScrollPane;    
import javax.swing.JTable;    
import javax.swing.JTextField;    
import javax.swing.table.DefaultTableModel;    

public class Invent {

    DefaultTableModel dtm;

    public Invent()
    {
        initComponents();
        //readfile();
       dtm = (DefaultTableModel)myjtable.getModel();
     //   readFile();
    }


    private void initComponents()  
    {
        myjtable = new javax.swing.JTable();
        JFrame f= new JFrame("InventoryDBFile");
        f.setSize(800, 800);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(false);            
        JTextField txtitem = new JTextField(20);
        txtitem.setBounds(100, 10, 100, 25);
        f.add(txtitem);
        JTextField txtprice = new JTextField(20);
        txtprice.setBounds(100, 40, 100, 25);
        f.add(txtprice);
        JTextField txtquantity = new JTextField(20);
        txtquantity.setBounds(100, 70, 100, 25);
        f.add(txtquantity);         
        JTextField txtreorder = new JTextField(20);
        txtreorder.setBounds(100, 100, 100, 25);
        f.add(txtreorder);
        JLabel l1=new JLabel("ItemName");
        l1.setBounds(10, 10, 80, 20);
        f.add(l1);
        JLabel l2=new JLabel("Price");
        l2.setBounds(10, 40, 80, 20);
        f.add(l2);
        JLabel l3=new JLabel("Quantity");
        l3.setBounds(10, 60, 80, 20);
        f.add(l3);
        JLabel l4=new JLabel("ReorederLevel");
        l4.setBounds(10, 90, 100, 20);
        f.add(l4);          
        JButton btnadd=new JButton("Add");  
        btnadd.setBounds(10,150,60, 20);  
        f.add(btnadd);  
        f.setSize(300,400);  
        f.setLayout(null);  
        f.setVisible(true);         
        JButton btnupdate=new JButton("Update");  
        btnupdate.setBounds(80,150,60, 20);  
        f.add(btnupdate);  
        f.setSize(300,400);  
        f.setLayout(null);  
        f.setVisible(true);         
        JButton btndelete=new JButton("Delete");  
        btndelete.setBounds(150,150,60, 20);  
        f.add(btndelete);  
        f.setSize(300,400);  
        f.setLayout(null);  
        f.setVisible(true);         
        JButton btnlist=new JButton("Reload");  
        btnlist.setBounds(220,150,60, 20);   
        f.add(btnlist);  
        f.setSize(300,400);  
        f.setLayout(null);  
        f.setVisible(true);
    //here i am creating the table    
        String[] columnNames = {"Item",
                                "Price",
                                "Quantity",
                                "reorderLevel",
                                };

        Object[][] data = {
        {"", "",
         "", ""},
        {"", "",
         ""},
        {"", "",
         "", },
        {"", "",
         "", },
        {"", "",
         "" }
        };

        final JTable table = new JTable(data, columnNames);
        table.setPreferredScrollableViewportSize(new Dimension(100,100));
       table.setFillsViewportHeight(true);
      JScrollPane scroller = new JScrollPane(table); 
       f.add(scroller); 
       f.add(table);
        scroller.setBounds(400, 100, 400, 300);
        f.setVisible(true);
        JScrollPane scrollPane = new JScrollPane(table);            
        f.setSize(300, 150);
       f.setVisible(true);          
       btnadd.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnaddActionPerformed(evt);
           }
       }
       );   

       btnupdate.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnupateActionPerformed(evt);
           }
       }
);  

       btndelete.addActionListener(new java.awt.event.ActionListener() {
           public void actionPerformed(java.awt.event.ActionEvent evt) {
               btndeleteActionPerformed(evt);
           }
       }
);  
       /*   b3.addActionListener(new java.awt.event.ActionListener() {
         public void actionPerformed(java.awt.event.ActionEvent evt) {
               btnlistActionPerformed(evt);
           }
       }
);  
    */

    }


    private void btnaddActionPerformed(java.awt.event.ActionEvent evt) 
    {
           String item = txtitem.getText();
           String price = txtprice.getText();
           String quantity=txtquantity.getText();
           String reorder=txtreorder.getText();
           try {
           String filename= "C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt";
                   FileWriter myfile = new FileWriter(filename,true);                   
                    PrintWriter outStream = new PrintWriter(myfile);
                    outStream.print(item);
                    outStream.print("|");
                    outStream.print(price);
                    outStream.print("|");
                    outStream.print(quantity);
                    outStream.print("|");
                    outStream.print(reorder);
                    outStream.print("\r\n");
                    outStream.close();             
                    txtitem.setText("");
                        txtprice.setText("");
                        txtquantity.setText("");
                        txtreorder.setText("");
                        myfile.close(); 

           readFile();
           } catch (Exception e) {
    e.printStackTrace();}
    }

    private void readFile()
    {
            BufferedReader br = null;

      try {

      String sCurrentLine;

      br = new BufferedReader(new FileReader("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt"));

      if (dtm.getRowCount() > 0) {
          for (int i = dtm.getRowCount() - 1; i > -1; i--) {
              dtm.removeRow(i);
          }
      }
      while ((sCurrentLine = br.readLine()) != null) {

      String item1=sCurrentLine.toString();

      String regexp = "[|]+";

      String[] lines = item1.split(regexp);

      Vector v = new Vector();  

             String item2;
             String price2;
             String quantity2;
             String reorder2;

             item2=lines[0].toString();
             price2=lines[1].toString();
             quantity2=lines[2].toString();
             reorder2=lines[3].toString();


             v.add(item2);
             v.add(price2);
             v.add(quantity2);
             v.add(reorder2);

             dtm.toString();
             dtm.addRow(v); 


      }

      } catch (IOException e) {
      e.printStackTrace();
      } finally {
      try {
      if (br != null)br.close();
      } catch (IOException ex) {
      ex.printStackTrace();
      }
      }
    }


    private void btnupateActionPerformed(java.awt.event.ActionEvent evt1)
    {


        dtm = (DefaultTableModel)myjtable.getModel();

        int r=myjtable.getSelectedRow();
        String str=myjtable.getValueAt(r,0).toString();
        String str11=myjtable.getValueAt(r,1).toString();
        String str22=myjtable.getValueAt(r,2).toString();
        String str33=myjtable.getValueAt(r,3).toString();
        String finstr=str+"|"+str11+"|"+str22+"|"+str33;

        int row=dtm.getRowCount();     
        try  
        { 
            RandomAccessFile r1=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt","rw");
            RandomAccessFile r2=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt","rw");
            FileWriter myfile = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt",true);
            PrintWriter outStream = new PrintWriter(myfile);
            FileWriter myfile1 = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt",true);
            PrintWriter outStream1 = new PrintWriter(myfile1);

            r2.setLength(0);
            //r2.close();

            String regexp = "[|]+";
            for(int i=0;i<row;i++)
            {   
             String str1=r1.readLine().trim();
             String[] line = str1.split(regexp);
            if(line[0].compareTo(str)!=0)
            {
                outStream.print(str1);
                outStream.print("\r\n");

            }
            else
            {
                outStream.print(finstr);
                outStream.print("\r\n");


            }
            }
            outStream.close();

            r2.seek(0);
            r1.setLength(0);
            for(int i=0;i<row;i++)
            {   

             String str1=r2.readLine().trim();

                outStream1.print(str1);
                outStream1.print("\r\n");


            }
            r1.close();
            r2.close();
            outStream1.close();
            readFile();
        }
            catch (IOException e) {     
                System.out.println(e);     
            }

    }



    private void deleteRow() {
    dtm = (DefaultTableModel)myjtable.getModel();
    int r=myjtable.getSelectedRow();
    //System.out.println(myjtable.getValueAt(r,0));
    String str=myjtable.getValueAt(r,0).toString();
    //dtm.removeRow(myjtable.getSelectedRow());

    int row=dtm.getRowCount();     
    //int col=dtm.getColumnCount();     
    try  
    { 
        RandomAccessFile r1=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt","rw");
        RandomAccessFile r2=new RandomAccessFile("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt","rw");
        FileWriter myfile = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\TempFile.txt",true);
        PrintWriter outStream = new PrintWriter(myfile);
        FileWriter myfile1 = new FileWriter("C:\\WINNT\\PROFILES\\palanisamyp\\workspace\\InventoryDBInfile\\Myfile.txt",true);
        PrintWriter outStream1 = new PrintWriter(myfile1);

        r2.setLength(0);
        //r2.close();

        String regexp = "[|]+";
        for(int i=0;i<row;i++)
        {   
         String str1=r1.readLine().trim();
         String[] line = str1.split(regexp);
        if(line[0].compareTo(str)!=0)
        {
            outStream.print(str1);
            outStream.print("\r\n");

        }
        }
        outStream.close();

        r2.seek(0);
        r1.setLength(0);
        for(int i=0;i<row-1;i++)
        {   

         String str1=r2.readLine().trim();
         //String[] line = str1.split(regexp);
        //if(line[0].compareTo(str)!=0)

        {
            outStream1.print(str1);
            outStream1.print("\r\n");

        }
        }
        r1.close();
        r2.close();
        outStream1.close();
        readFile();
    }
    catch (IOException e) {     
        System.out.println(e);     
    }



    }

    private void btndeleteActionPerformed(java.awt.event.ActionEvent evt2){

    deleteRow();

    }







    public static void main(String[] args) {
        // TODO Auto-generated method stub
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Invent();//.setVisible(true);


            }
        });
    }

    private javax.swing.JButton btnadd=new JButton();
    private javax.swing.JButton btnupdate=new JButton();

    private javax.swing.JButton btndelete=new JButton();
    private javax.swing.JButton btnlist=new JButton();

    private javax.swing.JLabel jLabel1=new JLabel();
    private javax.swing.JLabel jLabel2=new JLabel();
    private javax.swing.JLabel jLabel3=new JLabel();
    private javax.swing.JLabel jLabel4=new JLabel();
    private javax.swing.JLabel jLabel5=new JLabel();

    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable myjtable;

    private javax.swing.JTextField txtitem=new JTextField();
    private javax.swing.JTextField txtprice=new JTextField();
    private javax.swing.JTextField txtquantity=new JTextField();
    private javax.swing.JTextField txtreorder=new JTextField(); 



}

共 (2) 个答案

  1. # 1 楼答案

    您将表格两次添加到框架和滚动窗格中。通过将用表构造的JScrollPane添加到框架中,它将已经显示出来。无需多次添加

        JScrollPane scroller = new JScrollPane(table);      
        f.add(scroller); 
        f.add(table); //<- remove this line
    
        ..
    
        JScrollPane scrollPane = new JScrollPane(table); //<- remove this line too (scrollPane variable is never used or added to the frame)
    

    完成这些编辑后,将显示表格

  2. # 2 楼答案

    您永远不会将myjtable添加到任何其他组件。因此,它不会显示。看Table Tutorial

    通常,最好将JTable包装在JScrollpane中

    JScrollPane scrollPane = new JScrollPane(table);
    table.setFillsViewportHeight(true);
    

    以及将滚动窗格添加到组件:

    container.setLayout(new BorderLayout());
    container.add(table.getTableHeader(), BorderLayout.PAGE_START);
    container.add(table, BorderLayout.CENTER);