Java - Grafické komponenty (54.díl)

Napsal O webu (») 13. 8. 2008 v kategorii Programování, přečteno: 3396×
obrazky/java_logo.png

JTable

Nyní provedeme předefnování všech výše uvedených abstraktních metod třídy AbstractTableModel tak, aby poskytovaly použitelné výsledky.
public int getRowCount() {return data.length;}
public int getColumnCount() {return data[0].length;}
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}


Nastavení šířky sloupců. U tabulky často potřebujeme nastavit různé šířky sloupců v závislosti na typu zobrazovaných dat. K tomuto účelu slouží metoda etPreferredWidth(int sirka). Šířka je zadávána v pixelech. Metoda je volána pro konkrétní sloupec získaný metodou getColumn(int index).
t.getColumnModel().getColumn(0).setPreferredWidth(50);

Měnit šířku sloupců je též možno provádět prostřednictvím myši. Povolit či za kázat tuto možnost lze provést prostřednictvím metody setAutoResizeMode(int mode).
Mód Popis
AUTO_RESIZE_SUBSEQUENT_COLUMNS Změna šířky sloupce tabulky, nemá vliv na sousední sloupce.
AUTO_RESIZE_NEXT_COLUMN Změna šířky sloupce na úkor šířky následujícího sloupce.
AUTO_RESIZE_ALL_COLUMNS Změna šířky sloupce ovlivní šířku všech ostatních sloupců.
AUTO_RESIZE_LAST_COLUMN Změna šířky sloupce na úkor šířky předchozího sloupce.
AUTO_RESIZE_OFF Šířku sloupce není možné měnit.


Výběr řádků tabulky. V tabulce je možno označovat (tj. vybírat) řádky, se kterými můžeme v dalších krocích provádět různé manipulace. Existují tři mož nosti výběru (shodné s komponentou JList), lze je nastavit metodousetSelectionMode().

Detekci řádky/řádek, které byly vybrány, lze provést s využitím instance třídy ListSelectionModel. Vytvoříme instanci třídy ListSelectionModel, kterou inicializujeme prostřednictvím metody getSelectionModel().
ListSelectionModel vyber=t.getSelectionModel();
Při výběru řádky dochází k události ListSelection, pro práci s ní využijeme rozhraní ListSelectionListener. Zaregistrujeme posluchače
vyber.addListSelectionListener(new ListSelectionListener());
a následně implementujeme abstratktní metody rozhraní. V metodě vytvoříme inicializujeme odkaz třídy ListSelectionModel aktuálním modelem za použití metody getSource(). Na něj následně aplikujeme metodu isSelectionEmpty() sdělující, zda je výběr prázdný. Pokud není, získáme vybranou řádku metodou getMinSelectionIndex(). Postup je, jak vidíme, poměrně komplikovaný.
int radka;
vyber.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
int radka;
ListSelectionModel ls=(ListSelectionModel) e.getSource();
if (!l.isSelectionEmpty()) radka=ls.getMinSelectionIndex()
}
});

Číslo vybrané řádky sdělíme v JLabelu, který na formulář přidáme. Kód upravíme, výsledek vypadá takto:
public class Tabulky3 extends JFrame{
private int radka;
private JLabel l;
public Tabulky3(int width, int height)
{
this.setSize(width, height);
this.setTitle("Tabulky");
l=new JLabel();
TableModel tm=new TabulkyDataAbstract(5,5);
JTable t=new JTable(tm);
this.setLayout(new GridLayout(1,2));
JScrollPane sp = new JScrollPane(t,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(l);
t.getColumnModel().getColumn(0).setPreferredWidth(50);
ListSelectionModel vyber = t.getSelectionModel();
t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
vyber.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel ls=(ListSelectionModel) e.getSource();
if (!ls.isSelectionEmpty())
{
radka=ls.getMinSelectionIndex();
l.setText("Vybrany radek:"+String.valueOf(radka+1));
}
}
});
t.setAutoResizeMode(t.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
this.getContentPane().add(sp);
this.setVisible(true);
}
}

Autor: Filip Koval
Štítky: Java
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel nula a šest