簡體   English   中英

JavaSwing添加多個JTable到JFrame

[英]JavaSwing add multiple JTable to JFrame

I am working on java swing application.I have to browse multiple CSV data files and display them into JFrame using JTable.I am trying to add multiple(non static) JTable into JFrame.All (N) JTable i want to include inside a JSrollPane .此時我只能向 JScrollPane 顯示 1 個表。

提前致謝!

if (e.getSource() == jbtreadbrowsefile) {

            try {

                for(int k=0;k<file_locations.length;k++) {

                    String currentLocation=file_locations[k];
                    inputList = new ArrayList();
                    File inputF = new File(currentLocation);
                    InputStream inputFS = new FileInputStream(inputF);
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputFS));
                    inputList = br.lines().collect(Collectors.toList());
                    br.close();

                       int count = inputList.size();

                       if(count>0)
                       {
                           data = new String[count - 1][8];
                           for (int i = 0; i < count - 1; i++) {

                           String[] arrOfStr = inputList.get(i + 1).toString().split(",");
                           String test1= arrOfStr[0];
                           String test2= arrOfStr[1];
                           String test3= arrOfStr[2];
                           String test4 = arrOfStr[3];
                           String test5= arrOfStr[4];
                           String test6= arrOfStr[5];
                           String test7= arrOfStr[6];

                           data[i][0] = "" + (i + 1);
                           data[i][1] = test1;
                           data[i][2] = test2;
                           data[i][3] = test3;
                           data[i][4] = test4;
                           data[i][5] = test5;
                           data[i][6] = test6;
                           data[i][7] = test7;

                       }

                       j = new JTable(data, columnNames);
                       TableColumnModel tcm = j.getColumnModel();
                       tcm.getColumn(0).setPreferredWidth(40);
                       tcm.getColumn(1).setPreferredWidth(220);
                       tcm.getColumn(2).setPreferredWidth(120);
                       tcm.getColumn(3).setPreferredWidth(80);
                       tcm.getColumn(4).setPreferredWidth(80);
                       tcm.getColumn(5).setPreferredWidth(80);
                       tcm.getColumn(6).setPreferredWidth(80);
                       tcm.getColumn(7).setPreferredWidth(80);

                       DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
                       centerRenderer.setHorizontalAlignment(JLabel.CENTER);
                       j.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);

                       for (int i = 0; i < j.getRowCount(); i++) {
                           j.setRowHeight(i, 20);
                       }

                       j.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 15));
                       j.getTableHeader().setReorderingAllowed(false);
                       j.repaint();



                       JScrollPane sp = new JScrollPane(j); 
                       sp.setBounds(10, 200, 780, 440);
                       add(sp);



                       }
                   else
                       {
                           JOptionPane.showMessageDialog(this,"No Data Found in the File");
                       }


                }
JScrollPane sp = new JScrollPane(j); 
sp.setBounds(10, 200, 780, 440);
add(sp);

不要使用 setBounds()。 布局管理器的工作是確定組件的大小/位置。

此時我只能向 JScrollPane 顯示 1 個表。

正確的。 JScrollPane 旨在顯示單個 JTable。 JTable 的 header 將顯示在滾動窗格的 header 視圖中,表格將顯示在滾動窗格的中心。 然后,您可能還會在滾動窗格中看到滾動條,具體取決於表中的數據。

如果要將多個文件中的數據“合並”到同一個表中,則需要使用每個文件中的數據更新 TableModel,而不是每次都創建一個新表。

您可以使用DefaultTableModel的 addRow addRow(…)方法將數據動態添加到 model 中。

For displaying each JTable into JFrame,i added all JTable into a JPanel and added this JPanel into JScrollPane.After displaying each JTable the problem was that we can not display each JTable header.I added to another JPanel each JTable header and it's shows up.

if (e.getSource() == jbtreadbrowsefile) {

            GridLayout grid = new GridLayout(0, 1, 30, 20);
            jpaneltable=new JPanel(grid);
            try {

                for(int k=0;k<file_locations.length;k++) {

                    String currentLocation=file_locations[k];
                    inputList = new ArrayList();
                    File inputF = new File(currentLocation);
                    InputStream inputFS = new FileInputStream(inputF);
                    BufferedReader br = new BufferedReader(new InputStreamReader(inputFS));
                    inputList = br.lines().collect(Collectors.toList());
                    br.close();

                       int count = inputList.size();

                       if(count>0)
                       {
                           data = new String[count - 1][8];
                           for (int i = 0; i < count - 1; i++) {

                           String[] arrOfStr = inputList.get(i + 1).toString().split(",");
                           String test1= arrOfStr[0];
                           String test2= arrOfStr[1];
                           String test3= arrOfStr[2];
                           String test4= arrOfStr[3];
                           String test5= arrOfStr[4];
                           String test6= arrOfStr[5];
                           String test7= arrOfStr[6];

                           data[i][0] = "" + (i + 1);
                           data[i][1] = test1;
                           data[i][2] = test2;
                           data[i][3] = test3;
                           data[i][4] = test4;
                           data[i][5] = test5;
                           data[i][6] = test6;
                           data[i][7] = test7;

                       }

                       j = new JTable(data, columnNames);
                       TableColumnModel tcm = j.getColumnModel();
                       tcm.getColumn(0).setPreferredWidth(40);
                       tcm.getColumn(1).setPreferredWidth(220);
                       tcm.getColumn(2).setPreferredWidth(120);
                       tcm.getColumn(3).setPreferredWidth(80);
                       tcm.getColumn(4).setPreferredWidth(80);
                       tcm.getColumn(5).setPreferredWidth(80);
                       tcm.getColumn(6).setPreferredWidth(80);
                       tcm.getColumn(7).setPreferredWidth(80);

                       DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
                       centerRenderer.setHorizontalAlignment(JLabel.CENTER);
                       j.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);

                       for (int i = 0; i < j.getRowCount(); i++) {
                           j.setRowHeight(i, 20);
                       }

                       j.getTableHeader().setFont(new Font("SansSerif", Font.BOLD, 15));
                       j.getTableHeader().setReorderingAllowed(false);

                       j.getTableHeader().setPreferredSize(new Dimension(0,HEADER_HEIGHT));
                       j.repaint();


                       jpaneltable.add(j.getTableHeader(),BorderLayout.NORTH);
                       jpaneltable.add(j, BorderLayout.CENTER);


                       }
                   else
                       {
                           JOptionPane.showMessageDialog(this,"No Data Found in the File");
                       }


                }

                JScrollPane sp = new JScrollPane(jpaneltable,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
                sp.setBounds(10, 200, 780, 440);
                add(sp);



            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM