gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:51:19 26 4
gpt4 key购买 nike

我从主窗口打开 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com