使用JComboBox刷新JPanel时闪烁

时间:2013-07-23 11:35:54

标签: java swing jpanel jcombobox flicker

我正在尝试模仿Java中的excel接口。我有一个绘制方法,为我绘制网格,绘制所有单元格值,然后绘制所有JComboBox对象,这些对象保持为HashMap

每当我调用我的重绘功能时,我会看到组合框和其他绘画功能之间的闪烁。

有人可以建议我可以用来摆脱这种闪烁的方法吗?

我的油漆代码如下:

public void paintCells(Graphics g) throws Exception {
        int width = this.getWidth();
        int height = this.getHeight();

        if (this.graphics != null) g = this.graphics;

        Color oldColor = g.getColor();
        Font oldFont = g.getFont();

        g.setColor(attr.panelBackgroudColor);
        g.fillRect(0, 0, width, height);

        paintHeader(g);

        paintGrid(g);

        int endRow = startRow + getCurrViewRowCount();
        int endCol = startCol + getCurrViewColCount();
        DisplayRows[] display = new DisplayRows[endCol-startCol+1];
        Thread[]  displays =  new Thread[endCol-startCol+1];

        for (int i = startCol; i <= endCol; i++) {

            for (int j = startRow; j <= endRow; j++) {
                paintCell(g, i, j);
            }
         }

        paintSelectedCell(g);

        g.setColor(oldColor);
        g.setFont(oldFont);

        for (JComboBox dropDown : this.cellGrid.getDropDowns()) {
               orderedPair Pair =(orderedPair)                    this.getHashMapCellValues().get(this.getDropDowns().indexOf(dropDown));

               int col = Pair.getFirst();
               int row = Pair.getSecond();

               CellElement cellValue;
              try {
                  cellValue = new CellElement(col,row,dropDown.getSelectedItem().toString(),CellElement.CELLTYPE.NULL, CellElement.IOTYPE.INPUT);
                  this.getModel().addElement(cellValue);
              } catch (CellTypeException ex) {
                  Logger.getLogger(DisplayDropDownSpreadSheets.class.getName()).log(Level.SEVERE, null, ex);
              }
       dropDown.setBounds(this.getCellRect(this.getModel().getElement(col, row)));
               ((PricingCellModel)this.getModel()).setNull(col, row);

              dropDown.repaint();

    }

绘制标题绘制我的Excel界面的标题,绘制网格绘制线条和绘制单元绘制界面中的每个单元格。

0 个答案:

没有答案