Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修改此类渲染,将进度条的大小更改为变量?_Java_Swing_Jtable_Rendering_Jprogressbar - Fatal编程技术网

Java 修改此类渲染,将进度条的大小更改为变量?

Java 修改此类渲染,将进度条的大小更改为变量?,java,swing,jtable,rendering,jprogressbar,Java,Swing,Jtable,Rendering,Jprogressbar,我有以下代码: TableColumn column = jTable2.getColumnModel().getColumn(1); column.setCellRenderer(new ProgressRenderer()); 类ProgressRenderer: class ProgressRenderer extends DefaultTableCellRenderer { private final JProgressBar b = new JProgressBar(0, 1

我有以下代码:

TableColumn column = jTable2.getColumnModel().getColumn(1);
column.setCellRenderer(new ProgressRenderer());
类ProgressRenderer:

class ProgressRenderer extends DefaultTableCellRenderer {
    private final JProgressBar b = new JProgressBar(0, 100);// I NEED RECEIVE DE VALUE,                //LIKE THIS new JProgressBar(0, MAX);
    private final JPanel p = new JPanel(new BorderLayout());

    public ProgressRenderer() {
        super();
        setOpaque(true);
    b.setStringPainted(true);
        p.add(b);
        //p.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
    }
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Integer i = (Integer) value;

        String text = "Finalizou o Lote";
        if (i < 0) {
            text = "Pausa";
        } else if (i < 100) {
            b.setValue(i);
            return p;
        }
        super.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column);
        return this;
    }

    @Override
    public void updateUI() {
        super.updateUI();
        if (p != null) {
            SwingUtilities.updateComponentTreeUI(p);
        }
    }
}
类ProgressRenderer()

----编辑---- 谢谢,但现在我有个大问题,因为:

TableColumn column = jTable2.getColumnModel () GetColumn (1).; 
    column.setCellRenderer (new ProgressRenderer (maxValue));//
//如何知道何时添加对象以更改maxValue

我将使用此代码在jtable中插入值

private LinhasOnline getLinha() {

    LinhasOnline linha = new LinhasOnline();
    linha.setNome("Linha "+j);
            linha.setcont(j*(10));
            linha.setmax(100);

            j++;
            return linha;
}

private void addLinha() {
    getModel().addLinha(getLinha());// 
}
//我的getmodel

private LinhasOnlineTableModel getModel() {
    if (model == null) {
        model = (LinhasOnlineTableModel) getTblLinhasOnline().getModel();
    }
    return model;
}
//我的GetBllinhasOnline()


您可以像下面这样更改您的类:

class ProgressRenderer extends DefaultTableCellRenderer {
    private final JProgressBar b;// I NEED RECEIVE DE VALUE,                //LIKE THIS new JProgressBar(0, MAX);
    private final JPanel p = new JPanel(new BorderLayout());

    public ProgressRenderer(int maxValue) {
        super();
        b  = new JProgressBar(0, maxValue);
        setOpaque(true);
        b.setStringPainted(true);
        p.add(b);
    }
    ...
}

谢谢,但现在有其他问题,请看我的编辑评论,很抱歉,因为这样必须编码,但对我来说很难解释。如果您需要更好的解释,请告诉我:)
private LinhasOnlineTableModel getModel() {
    if (model == null) {
        model = (LinhasOnlineTableModel) getTblLinhasOnline().getModel();
    }
    return model;
}
 private JTable getTblLinhasOnline() {
    if (jTable2 == null) {
        jTable2 = new JTable();
        jTable2.setModel(new LinhasOnlineTableModel());
                    TableColumn column = jTable2.getColumnModel().getColumn(1);
                    column.setCellRenderer(new ProgressRenderer(max)); // need put the value of object( setmax)
    }
    return jTable2;
}
class ProgressRenderer extends DefaultTableCellRenderer {
    private final JProgressBar b;// I NEED RECEIVE DE VALUE,                //LIKE THIS new JProgressBar(0, MAX);
    private final JPanel p = new JPanel(new BorderLayout());

    public ProgressRenderer(int maxValue) {
        super();
        b  = new JProgressBar(0, maxValue);
        setOpaque(true);
        b.setStringPainted(true);
        p.add(b);
    }
    ...
}