JTable + wyniki z hibernate

JTable + wyniki z hibernate
tomas1704
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
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
Kopiuj
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:

Kopiuj
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...

snout
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:37
0

rany boskie z tym co zaszalałeś:

Kopiuj
        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?

Kopiuj
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:)


Naród wspaniały, tylko ludzie ch..je:(
- wódz i kochany ojczulek narodu: Józef Piłsudski
tomas1704
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
0

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

0

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

tomas1704
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
0

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

0

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

Kopiuj
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(table);
panel3.add(scrollPane);
tomas1704
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
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!

edytowany 1x, ostatnio: tomas1704
tomas1704
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
0

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

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)