Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



JTable refresh

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: JTable refresh

Autor: MadmanCZ

21:39:22 16.05.2011

Já vím že to může vytuhnout,ale je to fakt jen pro pár položek :) Kdyby to mělo být jako nějaký program který bych chtěl šířit dál než pro můj počítač tak to udělám pořádně :)

Citovat příspěvek

 

Re: JTable refresh

Autor: Maaartin

18:09:29 16.05.2011

Takze nacitas data v AWT vlakne, coz muze trvat. Kdyz to nevadi, tak OK, jinaxe na tohle pouziva SwingWorker. Ten nechas provest nacteni dat v pomocnym vlakne a pak ti okynkarna nevytuhne at to trva jaxce dlouho.

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

14:24:01 16.05.2011

Tak přes ten invokeLater se mi to nepovedlo ale udělal jsem to nakonec jinak, sice to není z hlediska správnosti úplně košér ale pro menší databázi to stači :)

public void updateKnihovna(){
try {
DBEngine dbengine = new DBEngine();
data = dbengine.VypisKomplet();
//create header for the table
header = new Vector();
header.add("ID"); //Empid
header.add("Název"); // employee name
header.add("Jméno"); // employee position
header.add("Příjmení"); // employee department
header.add("ISBN"); // employee department
header.add("Vydavatel"); // employee department
header.add("Země"); // employee department
header.add("Rok"); // employee department
header.add("Jazyk"); // employee department
header.add("Žánr"); // employee department
header.add("1.Klíčové slovo"); // employee department
header.add("2.Klíčové slovo"); // employee department
header.add("3.Klíčové slovo"); // employee department
header.add("Půjčeno"); // employee department
jTable1.setModel(new javax.swing.table.DefaultTableModel(data, header));
} catch (Exception ex) {
Logger.getLogger(HlavniProgram.class.getName()).log(Level.SEVERE, null, ex);
}
}

A pak tuhle metodu volám pokaždém stisku tlačítka :)
Tak ještě jednou děkuji za rady a za pomoc:)

Citovat příspěvek

 

Re: JTable refresh

Autor: Maaartin

11:39:30 16.05.2011

> [ital]Nejspíš máš pravdu :) Já vím že to není moc efektivní, ale v tomhletom co se týče programování plavu.[/ital]

Udelat to lip by pro tebe bylo asi dost slozity, ale do skoly by to takhle snad mohlo stacit.

> [ital]tohleto už mám vytvořené v okně s tabulkou . Mám tam připsat jTable1.setModel(new javax.swing.table.DefaultTableModel(
data, header )); ?[/ital]

To vypada jako inicializace, takze ne, tamto se musi provest pokazdy.

> [ital]Jinak když to napíšu tam jak sem se ptal ,tak to píše že nelze referencovat non-static variable in static... To asi nebude správná cesta :)[/ital]

Spravne je nedelat skoro nic static. To je ale uplne jiny problem.

> [ital]Tak jsem vytvořil jednoduché GUI okno ve kterém zkouším volat svoji databázi a ani tam to nejde,tabulka se naplní daty ale když to zkouším obnovit tak nic. Zkoušel jsem tam dávat table.repaint(); table.updateUI(); a nejde ani jedno :([/ital]

Prece nemuzes cekat ze repaint vi ze mas naky data nekde v DB a ze je ma natahnout znova. Repaint jenom zpusobi ze se nekdy zavola paint(), tam bys to mohl dat ale tam to nepatri - tam nepatri zadna pomala operace.

Na tlacitko strcit akci, v ni invokeLater, v nem vymenit model.

Citovat příspěvek

 

Re: JTable refresh

Autor: mKorbel

10:28:43 16.05.2011

prepac ani ma nehne sa tym zaoberat, asi som i** ale myslel som ze si das viacej zalezat, nie ze to Copy +Paste este raz, zacni radsej tymto,

samozrejme s umyslom ukoncit debatu v tomto threade

[code]
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import java.util.Random;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.table.*;

public class TableWithTimer extends JFrame implements ActionListener, Runnable {

private static final long serialVersionUID = 1L;
private JScrollPane scroll = new JScrollPane();
private JTable myTable;
private JPanel buttonPanel = new JPanel();
private JButton startButton = new JButton("Start Thread to Update Table");
private JButton stopButton = new JButton("Stop Thread for Update Table");
private JButton newButton = new JButton("Load new Data to Table");
private int count = 0;
private int delay = 3;
private javax.swing.Timer timer = null;
private boolean runProcess;
private int row = 0;
private int column = 0;
private String value = "Amnd";
private int amndValue = 0;
private String valueAt = "";
private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
private String[] head = {"One", "Two", "Three", "Four", "Five", "Six"};
private String[][] data = new String[25][6];

public TableWithTimer() {
myTable = new TableBackroundPaint0(data, head);
myTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
myTable.setGridColor(Color.gray);
myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
final TableCellRenderer cellRendener = myTable.getTableHeader().getDefaultRenderer();
myTable.getTableHeader().setDefaultRenderer(new TableCellRenderer() {

@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) cellRendener.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
label.setBackground(Color.orange);
label.setForeground(Color.darkGray);
label.setFont(new Font("SansSerif", Font.BOLD, 12));
label.setBorder(BorderFactory.createCompoundBorder(label.getBorder(),
BorderFactory.createEmptyBorder(0, 5, 0, 0)));
label.setHorizontalAlignment(SwingConstants.LEFT);
label.setHorizontalAlignment(SwingConstants.CENTER);
if ((label.getText().equals("First")) || (label.getText().equals("Second"))) {
label.setForeground(Color.red);
}
if ((label.getText().equals("Day")) || (label.getText().equals("Month")) || (label.getText().equals("Year"))) {
label.setForeground(Color.blue);
}
if ((label.getText().equals("Time"))) {
label.setForeground(Color.green);
}
return label;
}
});
TableColumnModel cm = myTable.getColumnModel();
for (int column1 = 0; column1 < cm.getColumnCount(); column1++) {
TableColumn colLeft1 = cm.getColumn(column1);
cm.getColumn(column1).setWidth(140);
cm.getColumn(column1).setPreferredWidth(140);
}
//myTable.setFillsViewportHeight(true); // apply paintComponent for whole Viewport
JButton cornerButtonTop = new JButton();
cornerButtonTop.setBackground(scroll.getViewport().getBackground());
JButton cornerButtonBottom = new JButton();
cornerButtonBottom.setOpaque(false);
scroll.setCorner(JScrollPane.UPPER_RIGHT_CORNER, cornerButtonTop);
scroll.setCorner(JScrollPane.LOWER_RIGHT_CORNER, cornerButtonBottom);
scroll.setViewportView(myTable);
scroll.setMinimumSize(new Dimension(600, 400));
scroll.setMaximumSize(new Dimension(900, 600));
scroll.setPreferredSize(new Dimension(850, 430));
add(scroll, BorderLayout.CENTER);
buttonPanel.setLayout(new GridLayout(1, 4, 10, 10));
startButton.addActionListener(this);
startButton.setEnabled(false);
stopButton.addActionListener(this);
stopButton.setEnabled(false);
JButton hideButton = new JButton();
newButton.addActionListener(this);
newButton.setEnabled(false);
buttonPanel.add(startButton);
buttonPanel.add(stopButton);
buttonPanel.add(hideButton);
buttonPanel.add(newButton);
hideButton.setVisible(false);
add(buttonPanel, BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 100);
pack();
setVisible(true);
start();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == startButton) {
runProcess = true;
new Thread(this).start();
myTable.requestFocus();
startButton.setEnabled(false);
stopButton.setEnabled(true);
} else if (e.getSource() == stopButton) {
runProcess = false;
startButton.setEnabled(true);
stopButton.setEnabled(false);
newButton.setEnabled(true);
} else if (e.getSource() == newButton) {
runProcess = false;
startButton.setEnabled(true);
stopButton.setEnabled(false);
newButton.setEnabled(false);
addNewData();
}
}

public void addNewData() {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
TableModel model = myTable.getModel();
for (int j = 0; j < model.getRowCount(); j++) {
int column = model.getColumnCount();
for (int i = 0; i < column; i++) {
model.setValueAt("Deleted", j, i);
}
}
startNewData();
}
});
}

private void start() {
timer = new javax.swing.Timer(delay * 100, updateCol());
timer.start();
}

private void startNewData() {
count = 0;
timer = new javax.swing.Timer(1500, updateCol());
timer.start();
}

@Override
public void run() {
count = 0;
Random random = new Random();
while (runProcess) {
row = random.nextInt(myTable.getRowCount());
column = random.nextInt(myTable.getColumnCount());
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
try {
amndValue++;
valueAt = ((myTable.getValueAt(row, column)).toString());
if (!(valueAt.startsWith("A"))) {
count++;
if (count == (25 * 6)) {
runProcess = false;
JOptionPane.showMessageDialog(myTable, " Update done ");
}
java.util.Date date = new java.util.Date();
String dateTime = sdf.format(date.getTime());
myTable.setValueAt((value + " " + String.valueOf(amndValue) + " at: " + dateTime), row, column);
//myTable.setValueAt(new Integer(1), row, column); // please uncoment for generate misstype error on EDT
myTable.changeSelection(row, column, false, false);
System.out.println("update cycle with value :"
+ (value + " " + String.valueOf(amndValue) + " at: " + dateTime) + ", table row :" + row
+ ", table column " + column);
}
} catch (Exception e) {
runProcess = false;
System.out.println("Error for update JTable cell");
e.printStackTrace();
}
}
});
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
}
}

public Action updateCol() {
return new AbstractAction("text load action") {

private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
System.out.println("updating row " + (count + 1));
TableModel model = myTable.getModel();
int cols = model.getColumnCount();
int row = 0;
for (int j = 0; j < cols; j++) {
row = count;
myTable.changeSelection(row, 0, false, false);
timer.setDelay(200);
Object value = "row " + (count + 1) + " item " + (j + 1);
model.setValueAt(value, count, j);
}
count++;
if (count >= myTable.getRowCount()) {
myTable.changeSelection(0, 0, false, false);
timer.stop();
System.out.println("update cycle completed");
myTable.clearSelection();
startButton.setEnabled(true);
newButton.setEnabled(true);
}
}
};
}

public static void main(String args[]) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
System.out.println(info.getName());
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (UnsupportedLookAndFeelException e) {
// handle exception
} catch (ClassNotFoundException e) {
// handle exception
} catch (InstantiationException e) {
// handle exception
} catch (IllegalAccessException e) {
// handle exception
}
TableWithTimer tableWithTimer = new TableWithTimer();
}
}

class TableBackroundPaint0 extends JTable {

private static final long serialVersionUID = 1L;

TableBackroundPaint0(Object[][] data, Object[] head) {
super(data, head);
setOpaque(false);
((JComponent) getDefaultRenderer(Object.class)).setOpaque(false);
}

@Override
public void paintComponent(Graphics g) {
Color background = new Color(168, 210, 241);
Color controlColor = new Color(230, 240, 230);
int width = getWidth();
int height = getHeight();
Graphics2D g2 = (Graphics2D) g;
Paint oldPaint = g2.getPaint();
g2.setPaint(new GradientPaint(0, 0, background, width, 0, controlColor));
g2.fillRect(0, 0, width, height);
g2.setPaint(oldPaint);
for (int row : getSelectedRows()) {
Rectangle start = getCellRect(row, 0, true);
Rectangle end = getCellRect(row, getColumnCount() - 1, true);
g2.setPaint(new GradientPaint(start.x, 0, controlColor, (int) ((end.x + end.width - start.x) * 1.25), 0, Color.orange));
g2.fillRect(start.x, start.y, end.x + end.width - start.x, start.height);
}
super.paintComponent(g);
}
}
[/code]

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

9:17:32 16.05.2011

Tak jsem vytvořil jednoduché GUI okno ve kterém zkouším volat svoji databázi a ani tam to nejde,tabulka se naplní daty ale když to zkouším obnovit tak nic. Zkoušel jsem tam dávat table.repaint(); table.updateUI(); a nejde ani jedno :(


public class PokusDB extends JFrame {
private Vector> data; //used for data from database
private Vector header;
JButton tlacitko = new JButton("Tlačítko");


JTable table = new JTable(data,header);



public PokusDB() throws Exception{
super("Moje okno");
setSize(640,480);

DBEngine dbengine = new DBEngine();
data = dbengine.VypisKomplet();

//create header for the table
header = new Vector();
header.add("ID"); //Empid
header.add("Název"); // employee name
header.add("Jméno"); // employee position
header.add("Příjmení"); // employee department
header.add("ISBN"); // employee department
header.add("Vydavatel"); // employee department
header.add("Země"); // employee department
header.add("Rok"); // employee department
header.add("Jazyk"); // employee department
header.add("Žánr"); // employee department
header.add("1.Klíčové slovo"); // employee department
header.add("2.Klíčové slovo"); // employee department
header.add("3.Klíčové slovo"); // employee department
header.add("Půjčeno"); // employee department

table.setModel(new javax.swing.table.DefaultTableModel(data, header
));
tlacitko.setSize(100,100);
tlacitko.addActionListener(new Tlac1stisk());
table.setSize(480,320);


init();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);

}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {

try {
PokusDB dlg = new PokusDB();
dlg.setVisible(true);
} catch (Exception ex) {
Logger.getLogger(PokusDB.class.getName()).log(Level.SEVERE, null, ex);
}


}
});
}

public void init(){
setLayout(new GridLayout(4,3));
add(tlacitko);
add(table);
}
class Tlac1stisk implements ActionListener{
public void actionPerformed(ActionEvent e){
table.repaint();
}
}
}

Citovat příspěvek

 

Re: JTable refresh

Autor: mKorbel

8:42:17 16.05.2011

ja mam blby tusak ze problem nie je v JTable ale niekde okolo v GUI, lebo ak tam je DefaultTableModel, tak tie kody (zaslane sem) by sa mali zobrazovat,

- dve JTable

- JTable nepridana do GUI

- potom prkotiny na jednu, dve metody, ale bez toho GUI, nic tam

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

23:51:26 15.05.2011

Já sem hledal a zkoušel všechny možné příklady, tento způsob výpisu se mi zdál nejlepší (pro mé jednoduché účely, já jsem v tomhle fakt naprostý amatér, databáze nás prakticky neučily) jedná se jen o jednoduchou aplikaci která má sloužit jako semestrální práce. Vytvoření jednoduché GUI , s tím bude možná problém, GUI vytvářím přes GUI Designer v Netbeansech. Na ten ChristmasTree jsem už narazil, leč z toho nejsem moc moudrý :(
Problém je, že mě trochu tlačí čas. Ale klidně vytvořím nové GUI ručně když to pomůže.
A mohu se ještě zeptat proč ten způsob co mám nejde použít?

Citovat příspěvek

 

Re: JTable refresh

Autor: mKorbel

23:27:14 15.05.2011

teraz nerypem, takto zacni a pripoj(vymen) k tomu model z predchadzajuceho threadu

http://java.sun.com/products/jfc/tsc/articles/ChristmasTree/

1/ nacasovanie a optimalizacia BackGroung Tasks
2/ to iste pre GUI
3/ cely kod sa hraje iba s Column + Rows ktore vidis na obrazovke
to co je mimo visible ViewPort nie je aktualizovane a ani data pre nezobrazene TableCells nie su nacitane

Citovat příspěvek

 

Re: JTable refresh

Autor: mKorbel

23:20:07 15.05.2011

jedine s cim suhlasim v tomto threade je @ Maaartin

velke male pismeno pre methodsName a ClassName

finally block - daj si naozaj si daj bach na Resulset.close(), Statement.close() vo finally bloku, vzdy ale vzdy zabere aaaaaj pocas Unexpected ci Fatal Java Error

ostatne toto su tu blbosti, iba sa zamotas a budes donakonecna nahanat chyby, fakt blbosti, raz napises takyto kod a donekonecna budes pisat desiatky riadkov, aby si opisal vsetko mozne, pretoze si zacal nie zrovna spravne,

plati o vas oboch (@ Maaartin viem ze islo o odpovede k otazkam, nie su vsak podla mna spravne)

navyse ak je predpoklad, ze z/do databazy budes pravidelne pisat/citat, tak connection nikdy nezatvaraj, usetris tak 20sec az 1min

@ MadmanCZ, nie je problem ti pomoct, ale skus to postupne, je tu tolko toho co mozes pokazit a mozno iba dve tri cesty ako to raz a spravne urobit

skus otvorit novy thread, kde spravis jednoduche GUI a vsetko co cucas z databazy natvrdo napis do String, je tu kopec ludi ktori tomuto dobre rozumeju, ale moj predpoklad je ze tam nic nie je s Db ale bordel v ostatnom GUI,

o co viacej namahy si das o to bude odpoved z tohoto fora podrobnejsia

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

21:27:50 15.05.2011

Jinak když to napíšu tam jak sem se ptal ,tak to píše že nelze referencovat non-static variable in static... To asi nebude správná cesta :)

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

21:13:15 15.05.2011

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {

try {
new HlavniProgram().setVisible(true);
} catch (Exception ex) {
Logger.getLogger(HlavniProgram.class.getName()).log(Level.SEVERE, null, ex);
}
}


tohleto už mám vytvořené v okně s tabulkou . Mám tam připsat jTable1.setModel(new javax.swing.table.DefaultTableModel(
data, header )); ?

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

21:10:25 15.05.2011

Nejspíš máš pravdu :) Já vím že to není moc efektivní, ale v tomhletom co se týče programování plavu.

A co mám pak volat pro ten update tabulky? :) Myšleno tak co kam napsat, já jsem fakt natvrdlej.

Citovat příspěvek

 

Re: JTable refresh

Autor: Maaartin

20:44:16 15.05.2011

> [ital]data = dbengine.VypisKomplet();[/ital]

To jsem nak prehlidnul.

Takze ono to tam ty data ukaze ale nereaguje na zmeny, jo? Kdyz se neco zmeni, tak nactes celou tabuli znova, mam pravdu? Pak by melo stacit udelat

SwingUtilities.invokeLater(
new Runnable() {
public void run() {
jTable1.setModel(new javax.swing.table.DefaultTableModel(
data, header
));
}
});

Jiste to neni nejefektivnejsi a nescu vedet co to udela s tabulkou co ma 1G radku, ale pro malinky by to melo byt OK.

> [ital]Já to zkoušel napsat jako rozšíření (extends) třídy AbstractTableModel (doufám že jsem to napsal správně) a to se mi nepovedlo.[/ital]

A co na tom neslo? Koukni se do zdrojaku DefaultTableModel jaxe to da delat. Neni toho zrovna malo...

Citovat příspěvek

 

Re: JTable refresh

Autor: MadmanCZ

17:35:53 15.05.2011

ten výpis použivám v Hlavní program, konkrétně řádek
data = dbengine.VypisKomplet();
Já to zkoušel napsat jako rozšíření (extends) třídy AbstractTableModel (doufám že jsem to napsal správně) a to se mi nepovedlo.
Já to zavírání měl původně ve finally bloku ale pak jsem to trochu omylem presunul :D
Neporadils bys prosím jak to přibližně napsat do toho modelu?

Citovat příspěvek

 

Re: JTable refresh

Autor: Maaartin

17:27:19 15.05.2011

Nezapomnel jsi ten [bold]v[/bold]ypisKomplet nekde pouzit (maly pismeno pls!)? Potrebujes to vsecko nacpat do toho modelu (to se musi delat v AWT vlakne, viz SwingUtilities.invokeLater).

Zavirani pripojeni dej do finally bloku.

Citovat příspěvek

 

JTable refresh

Autor: MadmanCZ

15:42:36 15.05.2011

Ahoj, tak se mi konečně povedlo vytvořit si výpis databáze do JTablu jak sem potřeboval, ale mám problém potřeboval bych aby se mi po přidání dat do databáze obnovil JTable. Zkoušel jsem jTable.UpdateUI() ale nějak mi to nefunguje :( Kdyby se to někomu povedlo vymyslet byl bych štastnej jak blecha, sedím nad tím celý víkend a nevím jak dál.

Tady kód připojení k DB:
public Connection dbConnection()throws Exception
{
Class.forName("org.h2.Driver");
String myDB ="jdbc:h2:tcp://localhost/~/test";
return DriverManager.getConnection(myDB,"sa","");
}


public Vector VypisKomplet()throws Exception
{
Vector> VypisKomplet = new Vector>();

Connection conn = dbConnection();
PreparedStatement pre = conn.prepareStatement("select * from KNIHOVNA");

ResultSet rs = pre.executeQuery();

while(rs.next())
{
Vector polozka = new Vector();
polozka.add(rs.getString(1)); //ID
polozka.add(rs.getString(2)); //Nazev
polozka.add(rs.getString(3)); //Jmeno
polozka.add(rs.getString(4)); //Prijmeni
polozka.add(rs.getString(5)); //ISBN
polozka.add(rs.getString(6)); //Vydavatel
polozka.add(rs.getString(7)); //Zeme
polozka.add(rs.getString(8)); //Rok
polozka.add(rs.getString(9)); //Jazyk
polozka.add(rs.getString(10)); //Zanr
polozka.add(rs.getString(11)); //FirstKW
polozka.add(rs.getString(12)); //SecondKW
polozka.add(rs.getString(13)); //ThirdKW
polozka.add(rs.getString(14)); //Pujceno
VypisKomplet.add(polozka);
}

/*Close the connection after use (MUST)*/
if(conn!=null)
conn.close();

return VypisKomplet;
}

Tady program (jFrame) s tabulkou (výběr jen důležitého kódu):

public class HlavniProgram extends javax.swing.JFrame {
private Vector> data;
private Vector header;
/** Creates new form HlavniProgram */



public HlavniProgram() throws Exception {

DBEngine dbengine = new DBEngine();
data = dbengine.VypisKomplet();

//create header for the table
header = new Vector();
header.add("ID"); //Empid
header.add("Název"); // employee name
header.add("Jméno"); // employee position
header.add("Příjmení"); // employee department
header.add("ISBN"); // employee department
header.add("Vydavatel"); // employee department
header.add("Země"); // employee department
header.add("Rok"); // employee department
header.add("Jazyk"); // employee department
header.add("Žánr"); // employee department
header.add("1.Klíčové slovo"); // employee department
header.add("2.Klíčové slovo"); // employee department
header.add("3.Klíčové slovo"); // employee department
header.add("Půjčeno"); // employee department



initComponents();
}

A tabulka :

jTable1 = new javax.swing.JTable();

jTable1.setModel(new javax.swing.table.DefaultTableModel(
data, header
));

jScrollPane1.setViewportView(jTable1);

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: