Cum se instalează proiectantul în jtable

Cum de a instala JTable proiectantul?

Este foarte simplu. Este necesară implementarea interfeței TableSellRenderer, care a avut o singură metodă:

publice Componenta getTableCellRendererComponent (tabelul JTable, valoare Object, boolean este ales, hasFocus boolean, int rând, coloană int)







După implementarea interfeței, obținem o clasă care va desena celulele mesei. Dar nu întreaga tabelă, ci numai celula tipului de coloană pentru care vom instala proiectantul nostru.

Să mergem la un exemplu. Lucrăm în Eclipse.

Să creați un nou proiect: File-> New-> Java Project sau File-> New-> Project. iar în fereastra selectată selectați Java Project, faceți clic pe Next (Următorul). În câmpul Nume proiect, specificați MyRendEditTable, faceți clic pe Terminare.

Faceți clic dreapta pe src, selectați New-> Package din meniul pop-up. Numele pachetului din câmpul Nume este setat la myRendEditTable.table.

Să vedem ce sa întâmplat: faceți clic dreapta pe clasa TableEx -> Run As -> Java Application, Get:

Acum, celulele tabelului sunt desenate de proiectanți instalați în clasa JTable în mod implicit. Nu ne potriveste destul. Masa trebuie să fie pompată. În prima coloană, numerele de linie sunt apăsate în partea dreaptă, le puneți în centru și modificați fundalul. În coloana "Cantitate", numerele negative vor fi extrase în roșu, așa cum este obișnuit în contabilitate. În ultima coloană, apăsați linia dreaptă. De ce? Am vrut așa. După pompare, nu recunoașteți acest tabel.

Vom crea o clasă pentru proiectant, extinderea clasei JLabel care atrage conținutul celulelor. Faceți clic cu butonul din dreapta pe pachetul myRendEditTable.table, selectați New-> Class, în câmpul Nume, introduceți IntegerRenderer, acest lucru este raportorul nostru pentru prima coloană (de fapt, coloanele sunt numerotate de la zero, deci este o coloana de zero). Codul pentru clasa de desen pentru prima coloană:

Să examinăm această clasă în detaliu. În primul rând, metoda

publice Componenta getTableCellRendererComponent (tabelul JTable, valoare Object, boolean este ales, hasFocus boolean, int rând, coloană int)

Argumentele aici sunt: ​​tabel - aceasta este masa noastră, valoare - valoarea în celulă, este ales - evidențiat celula noastră sau nu, hasFocus - celula sa se concentreze sau nu, rând - numărul de celule pe care le trage, coloana column- a acestei celule.

Utilizați metoda setHorisontalAlignment pentru a seta numerele de linie în centru. Folosind metoda setText, indicăm faptul că dacă valoarea celulei nu este declarată, puneți un spațiu.

Acum ia în considerare isSelected și hasFocus. IsSelected == adevărată înseamnă că celula este evidențiată, hasFocus == adevărată înseamnă că celula are focalizare. Dar celula care are focalizare nu este selectată simultan? Da, este. Atunci de ce distingeți între concentrare și selectivitate? Ideea este aici. Când punem cursorul pe un rând de masă, atunci toate celulele din acest magazin intră în proprietatea isSelected, isSelected = true. Toate celelalte celule din tabel au selectat = false. Celula rândului selectat, pe care cursorul se concentrează, adică. proprietatea hasFocus este adevărată, pentru toate celelalte celule, inclusiv celulele chiuvetei alocate, hasFocus = false. În clasa noastră, vom specifica raportorul cum să atragă un număr al celulei selectate (= true este ales) și că rândul de celule selectate, în care cursorul (hasFocus = true). În clasa JTable, o celulă cu focalizare este trasă, în jurul valorii de buclă. Urmând acest stil, setăm calea utilizând metoda setBorder. Stop. De ce setăm conturul celulei de focalizare, dacă clasa JTable deja înconjoară astfel de celule cu un contur? E simplu. După ce ne-am luat probleme pentru a instala un desenator pentru unele celule, clasa, astfel JTable revendicați responsabilitatea pentru desen, cu toții trebuie să se înregistreze: trasa conturul sau nu, ai nevoie de un fundal colorat sau nu, etc.







Prima coloană este procesată, acum facem raportorul pentru coloana "Cantitate". Faceți clic dreapta pe pachetul myRendEditTable.table, selectați New-> Class, în câmpul Name enter DoubleRenderer, acesta este editorul nostru pentru a treia coloană. Codul pentru clasa de desen pentru coloana "Cantitate":

În această clasă, verificăm valoarea setată în celulă, dacă este mai mică decât zero, atunci culoarea numărului este roșie. Metoda setForeground stabilește culoarea valorii specificate în celulă (nu fundalul setat de metoda setBackground).

Acum, ultima coloană. Faceți clic dreapta pe pachetul myRendEditTable.table, selectați New-> Class, în câmpul Name, tastați StringRenderer, acesta este editorul nostru pentru a treia coloană. Codul clasei de coloane pentru coloana "Depozit":

În această clasă, determinați dacă numărul coloanei este de trei (coloană == 3), apoi apăsați valoarea celulei la marginea dreaptă.

În acest moment, proiectul dvs. ar trebui să arate astfel:

Cum se instalează proiectantul în jtable

Proiectanții sunt gata, rămâne să ne informăm despre acest lucru. Proiectatorii se instalează pentru coloane. Fiecare coloană are un tip. Cum de a recunoaște acest tip? În modelul de tabel și avem clasa TableExModel, există un vector vColClass, în care sunt declarate tipurile corespunzătoare fiecărei coloane. Instalați proiectantul în tabel înseamnă să specificați editorul pentru tipul. Tipul primei coloane (sau mai degrabă zero) este Integer. Am pus proiectantul pentru tipul de coloană Integer:

table.setDefaultRenderer (Integer.class, nou IntegerRenderer ());

Acum, coloana "Număr" va fi redactată de raportorul nostru. Fiți atenți la finețe. La noi, doar o coloană are tipul Integer și dacă ar exista și altele? Apoi vor fi desenate de către raportorul nostru. Acest lucru nu este întotdeauna convenabil. Dar deja știm cum să depășim această complexitate, nu? Da, este adevărat. Avem două coloane de tip String. Am hotărât să apăsăm valorile din ultima coloană în partea dreaptă, dar în coloana Denumire și în tipul String, acestea trebuie să fie apăsate în partea stângă. De aceea, în clasa StringRenderer am indicat că schimbarea spre dreapta este valabilă numai pentru coloana numărul trei:

Vă atrag atenția că nu numai ultima coloană este desenată de editorul nostru StringRenderer, dar și coloana "Name", deoarece are și tipul String. Încă o dată. Proiectatorii sunt setați pentru tipul și dacă există mai multe coloane de acest tip, atunci editorul instalat funcționează în toate coloanele de acest tip. Pentru a forța coloanele de același tip să tragă diferit, am pus condiții care, de exemplu, dacă (coloană == 3), tragem ceva de genul acesta, și altele asemenea.

Modificați codul pentru constructorul TableEx () după cum urmează:

Cu aceste linii, am instalat editorii noștri pentru coloane precum String, Double, Integer:

Deci, masa a suferit o pompare grandioasă. Sunteți gata să vedeți rezultatul? Faceți clic dreapta pe pictograma pentru TableEx -> Run As -> Application Java:

Vom experimenta. Faceți dublu clic pe 18.8 și puneți un minus înaintea acestuia. Apăsați Enter. Numărul -18.8 a devenit roșu. Faceți clic o dată cu butonul din stânga 120.0. Întregul rând este evidențiat, toate celulele din acest rând au proprietatea isSelected = true, iar celula cu valoarea 120.0, în care cursorul are nowFocus = true. Conturul din jurul celulei cu 120,0 văzut? Știind că am încercat.







Articole similare

Trimiteți-le prietenilor: