Ik heb een probleempje met mijn cellrenderer, hij wil telkens de cell met de progressbar slechts updaten wanneer ik er op klik. Ik heb al geprobeerd met lussen alle cellen te doorlopen maar tevergeefs.
Hier had ik al eens gegeken voor informatie over cellrendering maar ik begrijp het eerlijk gezegd niet perfect:
http://www-128.ibm.com/developerworks/java/library/j-jtable/
Het probleem zit hem volgens mij hier:
Ik zou daar alle cellen in die bepaalde kolom moeten kunnen updaten, daar had ik reeds een lus geplaatst maar dit hielp niet/
Hier had ik al eens gegeken voor informatie over cellrendering maar ik begrijp het eerlijk gezegd niet perfect:
http://www-128.ibm.com/developerworks/java/library/j-jtable/
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
| import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
//Aan de kant van de downloader
public class download {
public void getFile(Object ipAddy, Object fileGet, Object size,DefaultTableModel model,JTable tblDownloads) {
//Progressbar aanmaken
final JTable table = tblDownloads;
JProgressBar progress = new JProgressBar() {
public boolean isDisplayable() {
//Om er voor te zorgen dat de animatie blijft lopen
return true;
}
public void repaint(int row, int column) {
//Om de cel te doen repainten
((DefaultTableModel)table.getModel()).fireTableCellUpdated(0,1);
}
};
progress.setIndeterminate(false);
model.addRow(new Object[]{fileGet.toString(), progress,size.toString(),ipAddy.toString()});
table.getColumnModel().getColumn(1).setCellRenderer( new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof JComponent) {
return (JComponent)value;
} else {
return null;
}
}
});
//DownloadThread aanmaken
Thread downloadingThread = new downloadingThread(ipAddy, fileGet, size, progress,table);
//DownloadThread starten
downloadingThread.start();
}
}
//DownloadThread
class downloadingThread extends Thread {
String ipAddy;
String fileGet;
String size;
JProgressBar progress;
int flag = 0;
JLabel done;
//Constructor
public downloadingThread(Object ipa, Object fget, Object fsize, JProgressBar bar,JTable table){
ipAddy = (String)ipa;
fileGet = (String)fget;
size = (String)fsize;
progress = bar;
table = table;
}
public void run() {
try {
//Connectie maken met de deler
Socket connect = new Socket(ipAddy, 1000);
//Input en Output instellen
ObjectOutputStream outclient = new ObjectOutputStream(connect.getOutputStream());
ObjectInputStream infrom = new ObjectInputStream(connect.getInputStream());
//Download aanvragen
outclient.writeObject(".download");
outclient.writeObject(fileGet);
//Progressbar minimum op 0 zetten
progress.setMinimum(0);
//Progressbar maximum op bestandsgrootte zetten
progress.setMaximum(Integer.parseInt(size.toString()));
//Wachten op het bestand
while (true) {
//Inlezen van de server
Object get = infrom.readObject();
switch (flag) {
//Main case
case 0:
//Wachten op de file
if (get.equals(".startdownload")) {
flag = 1;
}
case 1:
//File wordt ingelezen
int data;
int totalDataRead; //Ingelezen data
int totalSizeWritten = 0; //Weggeschreven data
//int totalSizeRead; //Ingelezen
int PACKET_SIZE=2048; //Grootte van een pakketje
byte[] packet = new byte[PACKET_SIZE];//Een pakketje (array) bestaande uit bytes
System.out.println("Bestand: " + fileGet);
String currentDirectory = System.getProperty("user.dir");
//Hier nog een controle doorvoeren op eventuele bestaan , nu overschrijft hij identieke
String uploaddirectory = currentDirectory + "\\share\\"+fileGet;
//File wegschrijven naar de share directory
FileOutputStream fos = new FileOutputStream(uploaddirectory);
//File byte per byte inlezen
while((totalDataRead = infrom.read(packet,0,packet.length)) >-1) {
//Data wegschrijven
fos.write(packet,0,totalDataRead);
//Hier wordt bepaald hoeveel reeds weggeschreven is
totalSizeWritten = totalSizeWritten + totalDataRead;
progress.setValue(totalSizeWritten);
}
//Zeggen dat de download compleet is
done.setText("Download Complete");
flag = 0;
}
}
} catch (Exception e) {System.out.println(e);}
}
} |
Het probleem zit hem volgens mij hier:
code:
1
2
3
| public void repaint(int row, int column) {
//Om de cel te doen repainten
((DefaultTableModel)table.getModel()).fireTableCellUpdated(0,1); |
Ik zou daar alle cellen in die bepaalde kolom moeten kunnen updaten, daar had ik reeds een lus geplaatst maar dit hielp niet/
[ Voor 4% gewijzigd door Verwijderd op 29-12-2006 15:06 ]