JTable + wyniki z hibernate

0

Mam problem nie wyświetla mi nagłówka tabeli, ponad to chciał bym aby w okienku pokazała się pusta tabela z jednym pustym wierszem zanim użytkownik podaj jakieś parametry wyszukiwania jestem początkującym programistą więc proszę o wyrozumiałość i konstruktywne rady ;]
Może kilka słów o tym co poniżej:

  1. Najpierw tworze ramke w konstruktorze ta klasa jest wywołana przez naciśniecie przycisku w innej ramce.
  2. uzytkownik wprowadza dane do JTextField i wybiera 2 ComboBoxy
  3. Wartości przekazuje do funkcji findbutton()
  4. ta tworzy kryteria z tego co podał albo nie podal uzytkownik
  5. i zapisuje wszystko do Listy typu HibernateData(mój obiekt z danymi EmpID, EmpFirstName... itd)
  6. zaczynają się schody "ta" lista jest przekazana do modelutabeli i teoretycznie w konstruktorze powinienem napisac table.setModel(tb) i dodac do panelu niestety to mi nie wyswietla wynikow w tabeli dopiero jak wcisnę to do funkcji w której tworze listy to prawie działa.
  7. Mój model nie jest chyba poprawny bo nie wyświetla mi tytułów kolumn
  8. Dane ida do tabeli -table a ta niestety ale wyświetla się dopiero wtedy gdy rozciagnę trochę okienko mam nadzieję że wy mi pomożecie
package org.main.Hibernate;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Conjunction;
import org.hibernate.criterion.Restrictions;



public class ModData implements ActionListener{
	
        //troche duzo tego wyszlo...
	private List<HibernateData> lista= new LinkedList<HibernateData>();
	private List<HibernateData> results = new LinkedList<HibernateData>();
	private final String department[]= {" ","HR","Production","Logistic", "Ware House","Office"};
	private final String work[] = {" ","true","false"};
	private final JTextField fname = new JTextField(50);
	private final JTextField lname = new JTextField(50);
	private final JTextField tel = new JTextField(20);
	private final JTextField age = new JTextField(2);
	private final JTextField id = new JTextField(10);
	private final JComboBox dep = new JComboBox(department);
	private final JComboBox worker = new JComboBox(work);
	private JButton mod = new JButton("Modyfikuj");
	private JButton find = new JButton("Znajdz");
	private JLabel labfname = new JLabel("First Name: ");
	private JLabel labtel = new JLabel("Tel: ");
	private JLabel labid = new JLabel("ID: ");
	private JLabel lablname = new JLabel("Last Name: ");
	private JLabel labdep = new JLabel("Department: ");
	private JLabel labworker = new JLabel("Worker: ");
	private JLabel labage = new JLabel("Age: ");
	private final JTable table = new JTable();
	private final JPanel mainpanel = new JPanel();
	private JPanel panel1 = new JPanel();
	private JPanel panel2 = new JPanel();
	private final JPanel panel3 = new JPanel();
	private TableModels tb =new TableModels();
	private JScrollPane scrollpane = new JScrollPane(table);
	

	 public ModData(){
			//layout dla paneli
			mainpanel.setLayout(new FlowLayout());
			panel1.setLayout(new GridLayout(14,1));
			panel2.setLayout(new GridLayout(1,2));
			panel3.setLayout(new FlowLayout());
			//dodawanie paneli do glownego panelu
			mainpanel.add(panel1);
			mainpanel.add(panel2);
			mainpanel.add(panel3);
			panel1.add(labid);
			panel1.add(id);
			panel1.add(labfname);
			panel1.add(fname);
			panel1.add(lablname);
			panel1.add(lname);
			panel1.add(labtel);
			panel1.add(tel);
			panel1.add(labage);
			panel1.add(age);
			panel1.add(labdep);
			panel1.add(dep);
			panel1.add(labworker);
			panel1.add(worker);
			panel2.add(find);
			panel2.add(mod);
			find.addActionListener(new ActionListener(){
					public void actionPerformed(ActionEvent event){
				     findbutton(fname,lname,tel,age,dep,worker,id);
					}
			});
			
		}
		
	public void actionPerformed(ActionEvent event){
		//tworzenie ramki

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
        		JFrame frame = new JFrame("Hibernate Modyfi");
        		frame.setSize(600, 500);
        		//frame.setResizable(false);
        		frame.setVisible(true);
        		frame.add(mainpanel);
            	
            }
    });
	}

	public void findbutton(JTextField fname, JTextField lname, JTextField tel, 
			JTextField age, JComboBox dep, JComboBox worker, JTextField id) {
		
		
		 String Fname = fname.getText();
		 String Lname = lname.getText();			 
		 //podobnie dla workera
		 String Worker = worker.getSelectedItem().toString();
		 //department
		 String Dep = dep.getSelectedItem().toString();
		 String Age = age.getText();
		 String Id = id.getText();
		 int ID = 0;
		 int Age1 = 0;
		 String Tel = tel.getText();
	 	 boolean bolworker = Worker.isEmpty();
		 boolean boldep =  Dep.isEmpty();
		 
		//===========================================================
		if(dep.getSelectedItem()==" ")
			boldep = true;
		if(worker.getSelectedItem()==" "){bolworker = true;}
			else{bolworker = false;}
		if(worker.getSelectedItem()=="true"){Worker = "1";}
		if(worker.getSelectedItem()=="false"){Worker = "0";}
		//============================================================
		
		Session session = HibernateConfig.getSessionFactory().getCurrentSession();
		session.beginTransaction();	
		
		//Criteria ===================================================
		
		Criteria crit = session.createCriteria(HibernateData.class);
		Conjunction con = Restrictions.conjunction();
		if(Id.isEmpty()==false){
			ID = Integer.parseInt(Id);
			con.add(Restrictions.eq("EmpID",ID));
		}
		if(Fname.isEmpty()==false)
			con.add(Restrictions.ilike("EmpFirstName",Fname));
		if(Lname.isEmpty()==false)
			con.add(Restrictions.ilike("EmpLastName",Lname));
		if(Tel.isEmpty()==false)
			con.add(Restrictions.ilike("EmpTel",Tel));
		if(Age.isEmpty()==false){
			Age1 = Integer.parseInt(Age);
			con.add(Restrictions.eq("EmpAge",Age1));
		}
		if(bolworker==false)
			con.add(Restrictions.eq("EmpWorker",Worker));
		if(boldep==false)
			con.add(Restrictions.eq("EmpDep",Dep));
		crit.add(con);
		//koniec criteria =====================================================
		
		
		List<HibernateData> lista = crit.list();
		for(HibernateData hData : lista){
			HibernateData r = new HibernateData();
		    results.add(r);

		}
	    tb.setData(lista);
		table.setModel(tb);
		table.repaint();
		//table
		panel3.add(table);

		session.getTransaction().commit();



	}
} 

A to kod modelu tabeli:

package org.main.Hibernate;

import java.util.LinkedList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

public class TableModels extends AbstractTableModel{
	private String[] colname= {"ID","First Name","Last Name","Telephone","Age","Worker","Department"};
	private List<HibernateData> data= new LinkedList<HibernateData>();
	
public void setData(List<HibernateData> results){
		this.data = results;
}
	public String getColumnName(int col){
		return colname[col].toString();
		
	}

	@Override
	public int getColumnCount() {
		return colname.length ;
	}

	@Override
	public int getRowCount() {
		return data.size();
    }

    public Object getValueAt(int row, int col) {
       HibernateData r =(HibernateData) data.get(row);
     
       switch(col){
       case 0: 
    	   	   return r.getEmpID();
       case 1:
               return r.getEmpFirstName();
       case 2:
               return r.getEmpLastName();
       case 3:
               return r.getEmpTel();
       case 4:
               return r.getEmpAge();
       case 5:
               return r.getEmpWorker();
       case 6:
               return r.getEmpDep();

       }
       return null;

       }
        
    }
 

Mam nadzieję że jakaś dobra dusza pomoże rozwiązać problem...

0

rany boskie z tym co zaszalałeś:

        private JLabel labfname = new JLabel("First Name: ");
        private JLabel labtel = new JLabel("Tel: ");
        private JLabel labid = new JLabel("ID: ");
        private JLabel lablname = new JLabel("Last Name: ");
        private JLabel labdep = new JLabel("Department: ");
        private JLabel labworker = new JLabel("Worker: ");
        private JLabel labage = new JLabel("Age: ");
  
 

i to samo z JTextField

jak będziesz musiał dodać taki JLabelów ze np 20, to też tak będziesz wypisywał?

nie lepiej trochę skrócić program?

private JLabel[] label;
....
label=new JLabel[] {"First Name: ", "Tel: ", "ID: ", .....}
for (int a=0;a<n;a++)
 panel1.add(label[a]);
 

krócej i przejrzyściej:)

0

Optymalizacja na koniec to jest do testów co gorsza nie działa prawidłowo...

0

Po zmianie danych (modelu) wywołaj fireTableDataChanged();

0

Nie rozwiązuje to problemu z brakiem nazw kolumn...

0

Wrzuć tabele do JScrollPane'a - wyświetlasz samą tabelę bez JTableHeadera.

JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(table);
panel3.add(scrollPane);
0

O!
Teraz mam ramkę z nazwami kolumn ale jest "wygaszona" i nie wsadza mi do niej rekordów...
Dlaczego?
A może źle to rozmieściłem, mógł byś pokazać na moim kodzie jak to powinno być?

już znalazłem usterkę!
Dzięki za pomoc!

0

Rozwiązałem problem a lekarstwo znalazłem w dokumentacji ;p
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);

1 użytkowników online, w tym zalogowanych: 0, gości: 1