2014-12-05 63 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