【问题标题】:How to retrieve value from JTextField in JTable?如何从 JTable 中的 JTextField 中检索值?
【发布时间】:2014-02-07 22:24:52
【问题描述】:

让我把我的问题分成两部分。

  1. 如何从JTextfiled 中的JTable 中检索值?
  2. 究竟数据如何一次性存入数据库?

姓名和年龄应在jbutton1 操作上从JTextfield 检索,并且 通过点击jbutton2Jtable的所有数据应该存储在SQL DB中。

下面是我的代码:

package tablefilterdemo;


public class Tableinputhroughtextbox extends javax.swing.JFrame {

    public Tableinputhroughtextbox() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jtfname = new javax.swing.JTextField();
        jtfage = new javax.swing.JTextField();
        jButton2 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null},
                {null, null},
                {null, null}
            },
            new String [] {
                "Name", "Age"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        jButton1.setText("Submit for Table");

        jButton2.setText("Submit for SQL");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(29, 29, 29)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(53, 53, 53)
                        .addComponent(jtfname, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(46, 46, 46)
                        .addComponent(jtfage, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)
                        .addGap(18, 18, 18)
                        .addComponent(jButton2)))
                .addContainerGap(82, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(92, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jtfname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jtfage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton2))
                .addGap(47, 47, 47)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 322, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(19, 19, 19))
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Tableinputhroughtextbox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Tableinputhroughtextbox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Tableinputhroughtextbox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Tableinputhroughtextbox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tableinputhroughtextbox().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField jtfage;
    private javax.swing.JTextField jtfname;
    // End of variables declaration                   
}

【问题讨论】:

    标签: java sql swing jtable jtextfield


    【解决方案1】:
    //I guess you already got value into your JTextField
    //Here I'm getting only two column into my JTable, you can take as many as you need
    
      jbutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                 //TODO Auto-generated method stub
    
                DefaultTableModel model=(DefaultTableModel) table.getModel();
    
                try 
                {
                    String s1,s2;
                    s1=tfield1.getText();
                    s2=tfield2.getText();
                    model.addRow(new Object[] {s1,s2});
    
                }
                catch(Exception ae){ 
                    ae.printStackTrace();
    
                    }
            }
        });
    

    这可能会有所帮助:)

    【讨论】:

      【解决方案2】:

      1) 如何从 JTable 中的文本文件中检索值?

      我假设你的意思是 JTextField?请注意拼写,因为编程是一种精确的练习,因此您不能在编码问题时马虎。

      您可以通过getText() 方法获得教程告诉您的文本。请看here

      2) 毕竟数据如何一次性存入数据库?

      请澄清您的问题。如果您正在寻找如何在 Java 中使用数据库,请查看 here。 JTables和表模型的使用方法请看here。我建议您将数据库代码与 Swing 代码分开,以帮助简化调试和编码。


      编辑 1
      关于将 JTable 与数据库一起使用,已在此问题上发布了大量答案,您最好在此站点上搜索这些答案。这不是一件微不足道的事情,需要您进行一些研究。例如,请查看以下链接:


      编辑 2
      你在评论中问:

      好的,让我们坚持一个问题。在上面的代码中,我创建了 2 个 JTexfield 和 Button。现在我想要这些检索到的数据如何在 Jtable 中显示?

      如果要将两个 JTextField 中的数据放在 JTable 的一行中,请考虑执行以下操作:

      • 在按钮的 ActionListener 中,首先从 JTextField 的文本中提取文本。
      • 接下来,您需要为您的 JTable 创建一个,这意味着将一行添加到 JTable 的模型中。如何完成将完全取决于 TableModel 的设置方式。
      • 如果您使用的是 DefaultTableModel 对象,那么您需要创建一个 Vector&lt;String&gt; 或字符串数​​组,将您的两个字符串放入向量或数组中,然后在您的 DefaultTableModel 变量上调用 addRow(rowData)。这假定向量或数组名为 rowData。
      • 如果您使用的是基于 AbstractTableModel 的自定义 TableModel,那么您需要编写自己的 addRow(...) 方法,并且您可能会传入一个自定义类的对象来保存您的两条数据.如果你走这条路,请确保你的 addRow(...) 方法调用了正确的 fireTableXXX(...) 方法,这里将是 fireTableRowsInserted(int firstRow, int lastRow)

      但最重要的是,请务必阅读我在上面链接的 JTable 教程,否则我的答案对您来说毫无意义。


      编辑 3
      例如,使用 DefaultTableModel:

      import java.awt.BorderLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.KeyEvent;
      import java.util.Vector;
      
      import javax.swing.*;
      import javax.swing.table.DefaultTableModel;
      
      @SuppressWarnings("serial")
      public class MyTableEg extends JPanel {
         private static final String[] COLUMNS = {"Column A", "Column B"};
         private DefaultTableModel model = new DefaultTableModel(COLUMNS, 0);
         private JTable table = new JTable(model);
         private JTextField fieldA = new JTextField(10);
         private JTextField fieldB = new JTextField(10);
         private JButton button = new JButton(new ButtonAction("Add Data", KeyEvent.VK_A));
      
         public MyTableEg() {
            JPanel topPanel = new JPanel();
            topPanel.add(fieldA);
            topPanel.add(fieldB);
            topPanel.add(button);
      
            setLayout(new BorderLayout());
            add(topPanel, BorderLayout.NORTH);
            add(new JScrollPane(table), BorderLayout.CENTER);
         }
      
         private class ButtonAction extends AbstractAction {
            public ButtonAction(String name, int mnemonic) {
               super(name);
               putValue(MNEMONIC_KEY, mnemonic);
            }
      
            @Override
            public void actionPerformed(ActionEvent evt) {
      
               // ***** here's the important bit of code
      
               Vector<String> rowData = new Vector<String>();  // create a row Vector
               rowData.add(fieldA.getText());    // fill it with data from JTextFields
               rowData.add(fieldB.getText());
               model.addRow(rowData);            // and add to table model
            }
         }
      
         private static void createAndShowGui() {
            JFrame frame = new JFrame("MyTableEg");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().add(new MyTableEg());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
         }
      
         public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
               public void run() {
                  createAndShowGui();
               }
            });
         }
      }
      

      【讨论】:

      • 我知道 JTextfiled 的 .getText 方法,但在这里我希望首先存储在 Array 中以及我们可以在 JTable 中看到的那些 ArrayBased 数据,以及关于第二个问题,我正在插入所有这些 Array 的数据数据将存储在数据库中
      • @user3172930:听起来你一次做的太多了。尝试一次解决每个问题,然后在遇到特定步骤时提出特定问题。此外,关于将 JTable 与数据库一起使用,已在此问题上发布了大量答案,您最好在此站点上搜索这些答案。这不是一件微不足道的事情,需要您进行一些研究。
      • OK 让我们坚持一个问题。在上面的代码中,我创建了 2 个 JTexfield 和 Button。现在我想要这些检索到的数据如何在 Jtable 中显示?
      • 感谢 :D :D StackOverflow 团队
      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多