Diskuze: setAutoCreateRowSorter-třídění INTEGER je abecedně :(
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 16 zpráv z 16.
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Vytvoř si vlastní třídu, která bude dědit od JTable a ve které bude metoda getColumnClass vracející správné datové typy a tu pak použij při návrhu toho formuláře místo JTable.
Díky. Jak jsem psal,ten formulář je naklikaný. Rodičovská třída je vidět, viz. výstřižek. Ale jak ji přepíšu? Zdá se mi, že toto pole je pro mne nepřístupné..
Omlouvám se. Jsem nějaký pomalý . V systému, kde jsem pracoval doposud, jsem si mohl udělat vlastní
knihovnu tříd. A pak své třídy (zde např. tu JTable přizpůsobenou) z
knihovny tříd jen přetáhnout na formulář. Jde asi něco podobného i v
netbeans, že? Podívám se po tom. Případně, že mně ještě postrčíte,
budu rád a moc děkuji.
Přesně tak to funguje i v Netbeans, prostě vytvoříš tu třídu (a
hlavně zkompiluješ ) a pak
ji jenom přetáhneš do formuláře kde ji chceš.
No právě tomu nerozumím. Vytvořit tu třídu nějak tak
*/
public class IntgTable extends JTable {
public IntgTable() {
DefaultTableModel model = new DefaultTableModel();
TableRowSorter trs = new TableRowSorter(model);
...
//trs.setComparator(0, new IntComparator());
...
setRowSorter(trs);
setAutoCreateRowSorter(false);
}
}
není problém, ale jak ji "zvizualizovat", když nemá pod sebou formulář?
A jak ji pak nacpat do palety? Vůbec se nechytám
takže vytvoření "custom controlu" je prý jednoduché
https://docs.oracle.com/…ontrols.html
nic z toho ale není v mých NetBeans (které jsem kvůli tomu povýšil na EE), není to návod pro Eclipse?
Na přidávání do palety kašli, prostě tu třídu IntgTable popadni v projekt exploreru a přetáhni ji na formulář v designeru, ona už se 'zvizualizuje' sama:)
jo ba, zrovna se mi to povedlo, jdu se sem pochlubit a .. pozdě
je to tak jednoduché, až to šokuje
Díky moc!
prosím ještě o pomoc, vytvořil jsem a přidal fo JFormu třídu
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class IntTab1 extends JTable {
class MyTableModel extends DefaultTableModel {
public MyTableModel(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
@Override
public Class getColumnClass(int col) {
if (col == 1) //second column accepts only Integer values
return Integer.class;
else return Integer.class; //other columns accept String values
}
@Override
public boolean isCellEditable(int row, int col) {
if (col == 0) //first column will be uneditable
return false;
else return true;
}
}
public IntTab1 (TableModel MyTableModel) {
}
}
ALE:
v generované sekci Init Components se objeví chyba, viz. obrázek.
Tu třídu přepisuju od rána a ne a ne na to přijít.
Udělal jsem si na MousePressed vypsání getColumnName(0).getClass().. a byl to stále string. A teď je špatně konstruktor.
je to špatně, ano, ale nevím, jak svůj TableModel té tabulce vnutit.
Ale toto
public class IntTab1 extends JTable {
// nechodí!!
DefaultTableModel MyTableModel;
class MyTableModel extends DefaultTableModel {
public MyTableModel(Object rowData[][], Object columnNames[]) {
super(rowData, columnNames);
}
......
nechodí také...
To proto že vytváříš ten MyTableModel jako vnitřní třídu v IntTab. Vytáhni MyTableModel ven jako samostatnou třídu.
Díky. Jen, prosím, jak ten MyTableModel dostanu k té příslušné
tabulce?
Tabulku table_tipy refreshuji takto
private void Refresh_table_tipy() {
String sql = "Select * from Tipy";
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
table_tipy.setModel(DbUtils.resultSetToTableModel(rs));
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
A tu tabulku jsem přetáhl z palety a pojmenoval table_tipy.
Objevil jsem Code Customizer a MyTableModel jsem se tam pokusil vnutit. Viz. obr1. Udělal jsem si event, která vypisuje getColumnClass a getModel
private void table_tipyMousePressed(java.awt.event.MouseEvent evt) {
String qq = table_tipy.getColumnClass(1).toString();
qq=qq+" "+table_tipy.getModel();
JOptionPane.showMessageDialog(null, qq);
a zase nic, viz. obr 2.
Chodí to. Děkuji za snahu pomoci. Bohužel jsem si stále přepisoval MyTableModel v metodě Refresh_table_tipy() viz.tady výše a tak mi snaha pomoci nebyla nic platná.
Když jsem na to přišel, nevěděl jsem, jak bych se vypořádal s DbUtils.resultSetToTableModel(rs)) knihovnou (import net.proteanit.sql.DbUtils), která dělá zásadně DefaultTableModel, jak bych ji donutil aby přebírala můj model.
Naštěstí jsem našel na netu podobný zdroják (http://stackoverflow.com/…-with-search). Ten jsem použil a přepsal tam na konci výstup do TableDefaultModel na ten svůj a je to. Toho kódu je jen kousek.
Ještě jednou děkuji a omlouvám se za svou grafo a jinou mánii
Zobrazeno 16 zpráv z 16.