2015-10-09 155 views
1

我有一個網格佈局JButton s,我想用點擊時用一個彩色圓圈填充每個單獨的按鈕。我只知道如何在點擊時填充文字JButton,我會如何去做這件事?用圓圈填充Jbutton

這是我的代碼,點擊時,而不是使用setText("")我想用圓圈填充該按鈕。

public void actionPerformed(ActionEvent e) { 

      for(int r = 0; r < row; r++){ 
       for(int c = 0; c < col; c++){ 
        if (board[row][col] == e.getSource()){ 
          int temp = game.dropDiskAt(c); 
          game.dropDiskAt(c); 
          board[temp][c].setText(""); 
         } 
+0

那麼,你可以做這樣的事情[this](http://stackoverflow.com/questions/15846937/painting-a-particular-button-from-a-grid-of-buttons/15847188#15847188)或者你可能只是使用圖片 – MadProgrammer

+0

我還是很困惑><您提供的代碼在整個按鈕中的陰影恰好是圓形的,我試圖在網格中的一個彩色圓圈中點擊按鈕,我正在嘗試連接4場比賽。 – CodyVick

+0

那麼?而不是使用'fillOval',使用'drawOval'。看看[2D圖形](http://docs.oracle.com/javase/tutorial/2d/)關於繪畫的更多細節 – MadProgrammer

回答

2

這可能是一個解決方案

import java.awt.Component; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Paint; 
import java.awt.RenderingHints; 

import javax.swing.Icon; 

public class ColorIconRound implements Icon { 

private int size; 
private Paint color; 

public ColorIconRound(int size, Paint color) { 
    this.size = size; 
    this.color = color; 
} 

@Override 
public void paintIcon(Component c, Graphics g, int x, int y) { 
    Graphics2D g2d = (Graphics2D) g; 
    Paint op = g2d.getPaint(); 
    g2d.setRenderingHint(
     RenderingHints.KEY_ANTIALIASING, 
     RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.setPaint(color); 
    g2d.fillOval(x, y, size, size); 
    g2d.setPaint(op); 
} 

@Override 
public int getIconWidth() { 
    return size; 
} 

@Override 
public int getIconHeight() { 
    return size; 
} 

} 

然後,只需將您的按鈕的圖標是這樣的:

board[temp][c].setIcon(new ColorIconRound(12,Color.WHITE)); 

如果你不喜歡它填補改變g2d.fillOvaldrawOval在paintIcon metod中。

+0

你忘了定義方法' getIconHeight()'。此外,右大括號錯過了。和方法paintIcon應該在繪製後恢復圖形對象中的原點顏色 –

+0

謝謝我會給這個鏡頭,它說我需要實現抽象方法Icon.getIconHeight,但是,我會在哪裏做到這一點? – CodyVick

+0

謝謝@Sergiy Medvynskyy,第一部分是複製和過去的錯誤,恢復確定添加的代碼(即使我可悲從未這樣做過......),你有一個Java文檔鏈接? –