0

我正在尝试模仿 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();

    }

Paint header 为我的 Excel 界面绘制标题,paint grid 绘制线条,paintcell 绘制界面中的每个单元格。

4

0 回答 0