【问题标题】:How do I use repaint() and revalidate()? [duplicate]如何使用 repaint() 和 revalidate()? [复制]
【发布时间】:2016-12-15 17:51:51
【问题描述】:

我有这些函数显示一组椅子,坐着和空的,每 2 分钟按顺序更改一次,但是,每次我调用 removeSeats() 然后 displaySeats() 时,所有座位组件似乎都消失了,但是我知道他们是他们的,因为我还有另一个功能可以查看每把椅子的信息。

private void removeSeats(){

    for(int i = 0; i < c.getClassroom().size(); i++)
        pnlGame.remove(c.getClassroom().get(i).getSprite());

    for(int i = 0; i < emptySeats.size(); i++)
        pnlGame.remove(emptySeats.get(i).getSprite());

    pnlGame.repaint();
}

private void displaySeats(){
    // GAME SCREEN (pnlGame) Components

    emptySeats = new ArrayList<Sprite>();
    Sprite temp;
    int x = 25, y = 70, xS = 0, yS = 0, eI = 0, cI = 0;

    for(int i = 0; i < 64; i++){
        if(i % 8 == 0 && i != 0){
            x = 25;

            y += 80;
        }

        temp = new Sprite();
        temp.setName("Empty Seat");
        temp.getSprite().setBorder(BorderFactory.createLineBorder(Color.black));
        temp.setSprite(new JLabel(new ImageIcon("src\\seat.png")));
        temp.setOrigin(x, y);
        temp.setDimensions(40, 60);

        if(c.search(xS, yS) != null){
            if(c.getClassroom().get(cI).isPresent()){
                c.getClassroom().get(cI).getSprite().setBorder(BorderFactory.createLineBorder(Color.white));
                c.getClassroom().get(cI).setOrigin(x, y);
                c.getClassroom().get(cI).setDimensions(40, 60);
                pnlGame.add(c.getClassroom().get(cI).getSprite());

            }else{
                emptySeats.add(temp);
                pnlGame.add(emptySeats.get(eI).getSprite());
                eI++;
            }

            cI++;
        }else{
            emptySeats.add(temp);
            pnlGame.paintComponents(temp.getSprite().getGraphics());
            pnlGame.add(emptySeats.get(eI).getSprite());
            eI++;
        }

        xS++;
        if(xS >= 8){
            xS = 0;
            yS++;
        }

        x += 80;
    }

    pnlGame.revalidate();

}

【问题讨论】:

    标签: java


    【解决方案1】:

    我认为您需要在您的 removeSeats 方法中添加这一行。

    pnlGame.revalidate();
    pnlGame.repaint();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      相关资源
      最近更新 更多