java - 从以下位置重新填充 JTable

标签 java swing jtable

我从主窗口打开 JDialog 以显示根据参数和模式检索的数据集。 (在这个简化版本中参数并不重要,只是“模式”,实际上我从记录集中填充它)。我想要

1.首先在对话框窗口中填充表格

  • 可选择使用按钮显示另一组数据,以不同模式检索

    第一个任务没问题。创建表格和填充按程序组织 从对话框构造函数可以正常工作。 但是,当我从按钮的 ActionListener 运行此过程时 - 我在同一窗口中获得了表的另一个副本 - 这是有意义的,因为我再次将其创建为"new"。我找不到在同一张表上重新填充数据的方法!网上的所有示例都是关于创建一个新的

  • 这里是调用部分

    btnFreqHistory.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Running history");
                    DlgFreqHistory FreqHist= new DlgFreqHistory(1000,2,1 );
                    FreqHist.setDefaultCloseOperation(FreqHist.DISPOSE_ON_CLOSE);
                    FreqHist.setVisible(true);  
    
                }
            });
    

    这是 JDialog 部分:

    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import java.awt.event.*;
    
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JTable;
    
    
    import java.sql.ResultSet;
    
    
    public class DlgFreqHistory extends JDialog {
    
        private final JPanel contentPanel = new JPanel();
    
    
        static int Freq;
        static int Side;
        static int Mode; //1- last 10 results, 2 - best  results
    
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
    
    
        }
    
        /**
         * Create the dialog.
         */
        public DlgFreqHistory(int iFreq, int iSide, int iMode) {
    
            Freq = iFreq;
            Side = iSide;
            Mode = iMode;
            setBounds(100, 100, 450, 300);
            getContentPane().setLayout(new BorderLayout());
            contentPanel.setLayout(new FlowLayout());
            contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
            getContentPane().add(contentPanel, BorderLayout.CENTER);
            this.setTitle("Last results for " + iFreq  );
            **// !! This call works fine**
            GetHistoryByMode(iFreq, iSide, 2);
    
                JPanel buttonPane = new JPanel();
                buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
                getContentPane().add(buttonPane, BorderLayout.SOUTH);
    
                    JButton btn_getData = new JButton("Get data");
                    btn_getData.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e){
                            System.out.println("in action performed");
                            ***// !! This call creates another table***
                            GetHistoryByMode(Freq, Side, 1);
                        }
                    }   );
    
                    buttonPane.add(btn_getData);
                    getRootPane().setDefaultButton(btn_getData);
    
    
        }
    
        private void GetHistoryByMode(int Freq, int iSide, int Mode)
        {
            System.out.println("in GetHistoryByMode " + Freq + "  " + iSide + "  " + Mode);
    
            String HistColumns[] = new String[2];
            String HistData[][] = new String[10][2];
    
            if (Mode==1) { 
                HistColumns[0] = "X1";
                HistColumns[1] =  "Result";
                HistData[0][0] = "xx1";
                HistData[0][1] = "15";
                HistData[1][0] = "xx2";
                HistData[1][1] = "20";
    
            }
            if (Mode==2) { 
                HistColumns[0] = "Y1";
                HistColumns[1] =  "Result";
                HistData[0][0] = "yy1";
                HistData[0][1] = "15";
                HistData[1][0] = "yy2";
                HistData[1][1] = "23";
            }
    
            JTable FreqHistory = new JTable(HistData, HistColumns);
            contentPanel.add(FreqHistory);
            JScrollPane scrollPane;
            scrollPane = new JScrollPane( FreqHistory );
            contentPanel.add( scrollPane, BorderLayout.CENTER );
         }
    }
    

    最佳答案

    不要在 GetHistoryByMode 方法中创建 JTable,而是在构造函数中创建它并将其添加到那里的 UI。然后在 GetHistoryByMode 方法中,创建一个新的 TableModel 并将其应用 (setModel) 到现有的 JTable

    看看How to Use Tables了解更多详情

    您可能还想通读Code Conventions for the Java TM Programming Language ,这将使人们更容易阅读您的代码,也让您更轻松地阅读其他人

    关于java - 从以下位置重新填充 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201079/

    相关文章:

    java - 使用 TCP 连接无法从 Android 接收数据

    java - Swing Jar 到 exe 转换

    java - 如何在 JOptionPane 中的背景图像上对齐多个文本字段?

    java - 如何取回 JTable 的数据?

    java - 如何获取组中嵌套括号的内容

    java - 从较短的字符串打印字符后,程序停止从两个字符串一次打印一个字符

    java - 选择下一个单元格 JTable

    java - JTable - 删除行问题

    java - 从属 jar 不会部署到 tomcat,其中带有此 jar 的项目在工作区中打开

    Java GridBagLayout JComponent 放置