比如说,把JProgressBar放进JTable的第2行、第2列的单元格中,并且让JProgressBar动起来

解决方案 »

  1.   


    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);
    }
    }
    //////////////////////////////////////////////
    }