Evo pogledaj. Uglavnom, treba da napravim sistem od dve tabele(server i klijent), i da klijentova funkcionishe tako shto se puni sa servera. E sad, ako se user loguje, i nije bilo izmena na serveru od userovog poslednjeg logOuta, client pravi tabelu sa svog harda (iz nekog TableModela koji smo sachuvali u nekom file-u). Ako je bilo izmena, client moze da pravi celu tabelu iz serverovog modela, ili da napravi tabelu iz svog modela na hardu, a onda da trazi od servera sve izmene od poslednjeg logOuta (ovo je teze ali je i praktichnije). Imash u TableMaker-u (u mom kodu) pod komentarom kako sam ovo zamislio. Kod je malo shugaviji, ali jebiga, non stop sam neshto prepravljao i pokushavao. E, da, glavni trip je u tome da kada server shalje informacije klijentu, MORA da ih shalje u obliku stringa i to na ovu foru: petrovic:marko:178:74:23:04:1985. Kapirash, sve podatke jednog reda tabele treba da spakuje u ovo. Ako si upucen u FIX protocol bice ti jasno, mada nije ni bitno, skapiracesh kako se to sve obavlja. Ovo shto vidish u trecoj koloni (new Date()), tu u stvari treba da stoji datum kada je poslednji put neshto izmenjeno. Ako imash vremena, reshi mi problem sa upload-ovanjem clientove tabele(daj mi samo ideju ili pseudo), onaj changeSelection() od ranije, i to je to. Ako mislish da imash josh neke korisne informacije, slusham te....
Pozdrav, hvala unapred.
Code:
/*
* SimpleTableDemo.java is a 1.4 application that requires no other files.
*/
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JButton;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.event.*;
import javax.swing.table.TableModel;
import java.awt.Color;
import javax.swing.JTextField;
public class TableMaker extends JPanel implements ActionListener, TableModelListener {
JTable clientTable;
JTable serverTable;
JButton copyButton;
TableModel model;
JTextField textField;
public TableMaker() {
super(new GridLayout(4,0));
String[] columnNames = {"Company Name",
"Equity Price",
"No Changes Since:"};
Object[][] data = {
{"Uzas", new Integer(5000), new Date()},
{"Bedak", new Integer(15000), new Date()},
{"Smor", new Integer(13000), new Date()},
{"Katastrofa", new Integer(13000), new Date()},
{"Blejanje", new Integer(11500), new Date()}
};
copyButton = new JButton("Copy");
copyButton.addActionListener(this);
textField = new JTextField("Search");
serverTable = new JTable(data, columnNames);
serverTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
serverTable.getModel().addTableModelListener(this);
clientTable = new JTable(serverTable.getRowCount(), serverTable.getColumnCount());
clientTable.setSelectionBackground(Color.BLUE);
//Create the scroll pane and add the table to it.
JScrollPane serverTableScrollPane = new JScrollPane(serverTable);
JScrollPane clientTableScrollPane = new JScrollPane(clientTable);
//Add the scroll pane to this panel.
add(serverTableScrollPane);
add(textField);
add(clientTableScrollPane);
add(copyButton);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(copyButton)) {
for(int i = 0; i < serverTable.getRowCount(); i ++)
for(int j = 0; j < serverTable.getColumnCount(); j ++)
clientTable.setValueAt(serverTable.getValueAt(i, j), i, j);
}
/*if (e.getSource().equals(sortButton)) {
TableSorter sorter = new TableSorter(new TableMaker());
clientTable = new JTable(sorter);
sorter.setTableHeader(clientTable.getTableHeader());
}
*/
}
public void tableChanged(TableModelEvent e) {
int row = e.getFirstRow();
int column = e.getColumn();
model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object changedData = model.getValueAt(row, column);
/*
* npr. na klijentu stavimo promenljivu lastLogOut, tipa Date(), koja dobija
* odgovarajucu vrednost svaki put kada se user izloguje sa servera.
* To uporedjuje sa serverovom promenljivom lastDataChange, i ako je lastDataChange
* obavljen nakon poslednjeg logOuta, user uzima podatke sa servera. Ako ne, user
* pravi tabelu iz sopstvenog TableModel-a koji bi nekako trebalo serijalizovati i
* chuvati na lokalnoj mashini.
*
* Ako je user kojim sluchajem konektovan, a u medjuvremenu dodje do promene podataka,
* server odmah shalje fix poruke do klijenta. Sve se obavlja kroz uporedjivanje
* pomenuta 2 datuma.
*/
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
JFrame frame = new JFrame("SimpleTableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
TableMaker newContentPane = new TableMaker();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
[Ovu poruku je menjao hyle dana 31.01.2007. u 13:12 GMT+1]