public class NewJFrame extends javax.swing.JFrame {
private JTable tab;
private JProgressBar progress; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame inst = new NewJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public NewJFrame() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
TableModel tabModel =
new DefaultTableModel(
new String[][] { { "One", "Two" }, { "Three", "Four" } },
new String[] { "Column 1", "Column 2" });
tab = new JTable(){
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if(row ==1 && column==1){
return new TableCellRenderer(){
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
progress = getProgress();
progress.setMinimum(0);
progress.setMaximum(100);
progress.setValue(0);
progress.setStringPainted(true);
new Thread() {
public void run() {
for(int i=1 ; i<=100 ; i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progress.setValue(i);
}
}
}.start();
return progress;
};
};
} else {
return super.getCellRenderer(row, column);
}
}
};
getContentPane().add(tab, BorderLayout.CENTER);
tab.setModel(tabModel);
}
pack();
setSize(400, 300);
} catch (Exception e) {
//add your error handling code here
e.printStackTrace();
}
}
private JProgressBar getProgress() {
if(progress == null) {
progress = new JProgressBar();
}
return progress;
}
}
private JTable tab;
private JProgressBar progress; /**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame inst = new NewJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public NewJFrame() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
TableModel tabModel =
new DefaultTableModel(
new String[][] { { "One", "Two" }, { "Three", "Four" } },
new String[] { "Column 1", "Column 2" });
tab = new JTable(){
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if(row ==1 && column==1){
return new TableCellRenderer(){
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
progress = getProgress();
progress.setMinimum(0);
progress.setMaximum(100);
progress.setValue(0);
progress.setStringPainted(true);
new Thread() {
public void run() {
for(int i=1 ; i<=100 ; i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
progress.setValue(i);
}
}
}.start();
return progress;
};
};
} else {
return super.getCellRenderer(row, column);
}
}
};
getContentPane().add(tab, BorderLayout.CENTER);
tab.setModel(tabModel);
}
pack();
setSize(400, 300);
} catch (Exception e) {
//add your error handling code here
e.printStackTrace();
}
}
private JProgressBar getProgress() {
if(progress == null) {
progress = new JProgressBar();
}
return progress;
}
}
http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
import java.awt.BorderLayout;
import java.awt.Component;import javax.swing.JProgressBar;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;public class NewJFrame extends javax.swing.JFrame implements Runnable {
private JTable tab;
private JProgressBar progress; public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame inst = new NewJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
//////////////////////////////////////////////
new Thread(inst).start();
//////////////////////////////////////////////
}
});
} public NewJFrame() {
super();
initGUI();
} private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
TableModel tabModel = new DefaultTableModel(new String[][] {
{ "One", "Two" }, { "Three", "Four" } }, new String[] {
"Column 1", "Column 2" });
tab = new JTable() {
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if (row == 1 && column == 1) {
return new TableCellRenderer() {
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
//////////////////////////////////////////////
if(value.getClass().getName().equals("java.lang.String"))
value = new Integer("0");
//////////////////////////////////////////////
progress = getProgress();
progress.setMinimum(0);
progress.setMaximum(100);
progress.setValue(0);
progress.setStringPainted(true);
//////////////////////////////////////////////
progress.setValue((Integer)value);
//////////////////////////////////////////////
return progress;
};
};
} else {
return super.getCellRenderer(row, column);
}
}
};
getContentPane().add(tab, BorderLayout.CENTER);
tab.setModel(tabModel);
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
} private JProgressBar getProgress() {
if (progress == null) {
progress = new JProgressBar();
}
return progress;
} //////////////////////////////////////////////
public void run() {
for (int i = 1; i <= 100; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
tab.getModel().setValueAt(i, 1, 1);
}
}
//////////////////////////////////////////////
}
修改的代码见注释中间的部分!