2014-12-05 33 views
0

如何显示从MySQL恢复的表(使用ArrayList)并使用JTable将其显示在Java Swing上。我认为从MySQL恢复表已完成。我的问题是在JTable上显示它。从休眠和Java的MySQL数据库中恢复表Swing

任何帮助将不胜感激。

类Afficher.java

package com.hibernate.stock; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.border.EmptyBorder; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableModel; 
import javax.swing.JButton; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.util.ArrayList; 
import java.util.List; 

import org.hibernate.SQLQuery; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 
import org.hibernate.Query; 

import javax.swing.JTable; 
import javax.swing.JTextArea; 

public class Afficher extends JFrame { 

private JPanel contentPane; 
private JTable table; 
ArrayList<Object[]> biens= new ArrayList<Object[]>(); 

/** 
* Launch the application. 
*/ 
private void fillTable(final JTable table, final List biens) { 
    final String columnNames[] = {"ID", "Nom", "Catégorie", "Quantité"}; 
    final DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); 
    table.setModel(tableModel); 
    for (final Object bien : biens) { 
     // Assuming each row in the biens list is a list of strings... 
     final List<Object> row = (List<Object>) bien; 
     tableModel.addRow(row.toArray()); 
    } 
} 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Afficher frame = new Afficher(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
    } 

    public Afficher() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    JButton btnAfficher = new JButton("Afficher"); 
    btnAfficher.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      Configuration cfg = new Configuration(); 
    cfg.configure("hibernate.cfg.xml"); 

    SessionFactory sf = cfg.buildSessionFactory(); 

    Session s = sf.openSession(); 

    Transaction tx = s.beginTransaction(); 
    SQLQuery query=s.createSQLQuery("select * from TBiens"); 
    biens = (ArrayList) query.list(); 
    fillTable(table, biens); 
    s.flush(); 
    tx.commit(); 
    s.close(); 
     } 
    }); 
    btnAfficher.setBounds(166, 235, 117, 25); 
    contentPane.add(btnAfficher); 

    JTable table = new JTable(); 
    fillTable(table, biens); 
    // I put the table in a scroll pane and had to make it bigger... 
    final JScrollPane tableScrollPane = new JScrollPane(table); 
    tableScrollPane.setBounds(224, 90, 400, 500); 
    contentPane.add(tableScrollPane); 


    } 
} 

enter image description here

+0

听起来像你有两个问题:一个与从MySQL数据库恢复表有关,另一个与使用Hibernate从数据库获取数据并使用Swing显示有关?你能提供一些关于你正在尝试做什么以及到目前为止尝试过的更多细节吗? – 2014-12-05 20:37:28

+0

我编辑了我的问题。现在清楚了吗?我应该添加任何细节吗? – sarra 2014-12-05 20:49:30

回答

0

对于您想要显示从摆动JTableTBiens表中的记录,你可以看看下面的堆栈溢出问题的一部分:Load arrayList data into JTable

我不清楚biens列表中有哪些类型的对象,以及TBiens表在数据库中具有哪些列。

注意:我认为您还需要使biens列表可以访问下面的代码,因为它现在只在btnAfficher按钮的动作侦听器中可见。当你已经解决了这一点,你可以调用fillTable方法来填充摇摆JTable使用正确的数据:

JTable table = new JTable(); 
fillTable(table, biens); 
// I put the table in a scroll pane and had to make it bigger... 
final JScrollPane tableScrollPane = new JScrollPane(table); 
tableScrollPane.setBounds(224, 90, 400, 500); 
contentPane.add(tableScrollPane); 

fillTable方法看起来是这样的:

private void fillTable(final JTable table, final List biens) { 
    final String columnNames[] = {"Column A", "Column B", "Column C"}; 
    final DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); 
    table.setModel(tableModel); 
    for (final Object bien : biens) { 
     // Assuming each row in the biens list is a list of strings... 
     final List<String> row = (List<String>) bien; 
     tableModel.addRow(row.toArray()); 
    } 
} 
0

它终于摸索@Freek德Bruijn :),我编辑了ActionPerformed方法:

  `public void actionPerformed(ActionEvent arg0) { 
      try{ 
      Configuration cfg = new Configuration(); 
      cfg.configure("hibernate.cfg.xml"); 

      SessionFactory sf = cfg.buildSessionFactory(); 

      Session s = sf.openSession(); 

      Transaction tx = s.beginTransaction(); 
      SQLQuery query=s.createSQLQuery("select * from TBiens"); 
      biens = query.list(); 
      ArrayList<Object[]> res = new ArrayList<Object[]>(biens); 

      final String columnNames[] = {"ID", "Nom", "Catégorie", "Quantité"}; 
      final DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); 
      table.setModel(tableModel); 
      for (final Object[] bien : res) { 
       // Assuming each row in the biens list is a list of strings... 
       final Object[] row = bien; 
       tableModel.addRow(row); 

      } 

      biens.size(); 
      System.out.print(i); 
      s.flush(); 
      tx.commit(); 
      s.close(); 
      } 
      catch (ClassCastException e) { 
       e.printStackTrace(); 
       } 



     } 
     });` 

非常感谢。

+0

不客气,祝你的项目好运! – 2014-12-06 22:15:29