第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

雙擊時,圓圈需要消失

雙擊時,圓圈需要消失

慕森卡 2022-08-17 12:31:31
我的代碼中的問題是,我試圖制作一個程序,當(dāng)你點擊網(wǎng)格中的單元格時,該單元格內(nèi)應(yīng)該會出現(xiàn)一個圓圈。我對此很滿意。但是,當(dāng)您第二次單擊時,圓圈應(yīng)該會消失。我不知道該怎么做。我嘗試將圓圈重新繪制為與實現(xiàn)方法中的背景相同的顏色,鼠標(biāo)按下,但這并不是很有效。它只有在你按下它時才會“消失”,但我希望它在點擊時消失。我把它寫成鼠標(biāo)按下,因為我不知道如何在鼠標(biāo)點擊方法中使用它。https://i.stack.imgur.com/M67ei.gif
查看完整描述

2 回答

?
慕村225694

TA貢獻1880條經(jīng)驗 獲得超4個贊

你的問題是一直把你的顏色設(shè)置為黑色。即使您檢測到按下圓圈時顏色不是黑色的,在mousePressed中,您再次將其設(shè)置為黑色,然后再次繪制圓圈,就像這樣在循環(huán)中。mousePressed


解決方案實際上非常簡單:


刪除 中的所有內(nèi)容。我們不需要它,mouseClicked基本上已經(jīng)只是mousePressed + mouseRelease。mousePressed

將其添加到鼠標(biāo)單擊的方法:


@Override

public void mouseClicked(MouseEvent e) {

    int row, col; // the row and column in the grid of squares where the user clicked.

    row = findRow( e.getY() ); col = findColumn( e.getX() );  //find the location of cells clicked


    System.out.println("Cell color: " + circleColor[row][col]); //will let you see whats happening

    if (circleColor[row][col] == null) {

        circleColor[row][col] = new Color(0,223,197);

    } else {

        circleColor[row][col] = null;

    }


    repaint(); // redraw the panel by calling the paintComponent method.

}

我們正在做什么 - 最初我們所有的顏色都是空的(在你的代碼中,mousePressed將它們設(shè)置為RGB [0,0,0],即黑色)。因此,當(dāng)我們第一次單擊單元格并看到單元格顏色為“null”(即其為空)時,我們將圓圈顏色設(shè)置為新顏色并繪制圓圈。如果我們再次按下,我們檢測到顏色不再是“空”,即單元格內(nèi)部有一個圓圈 - 然后我們將單元格設(shè)置回null。


有些人可能不喜歡Colors的“null”概念 - 如果您想要RGB [0,0,0]而不是null,只需將null的任何初始出現(xiàn)轉(zhuǎn)換為RGB [0,0,0],然后使用它:


public void mouseClicked(MouseEvent e) {

    ...


    //initial setup

    if (circleColor[row][col] == null) {

        circleColor[row][col] = new Color(0);

    }


    System.out.println("Cell color: " + circleColor[row][col]); //will let you see whats happening

    if (circleColor[row][col].equals(Color.getHSBColor(0,0,0))) {

        circleColor[row][col] = new Color(0,223,197);

    } else {

        circleColor[row][col] = new Color(0) ;

    }


    repaint(); // redraw the panel by calling the paintComponent method.

}


查看完整回答
反對 回復(fù) 2022-08-17
?
忽然笑

TA貢獻1806條經(jīng)驗 獲得超5個贊

您的方法測試顏色的行/列位置;如果它是非空的,它會畫一個圓,對吧?也許在mousePressed中,您可以測試該位置的circleColor是否為非空,如果是,則將其設(shè)為空。paint

我不清楚重繪是否正在填充單元格;它可能需要這樣做才能在繪制圓圈后覆蓋圓圈。

在這樣的應(yīng)用程序中,通常計算需要重新繪制的最小矩形,然后僅重新繪制它 - 您可以通過計算該矩形并將其坐標(biāo)傳遞到重繪方法中來執(zhí)行此操作,然后僅繪制與更改的矩形相交的組件部分。


查看完整回答
反對 回復(fù) 2022-08-17
  • 2 回答
  • 0 關(guān)注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號