【问题标题】:Filling a Jbutton with a circle用圆圈填充 Jbutton
【发布时间】:2015-10-09 10:48:37
【问题描述】:

我有一个JButtons 的网格布局,我想在单击时用彩色圆圈填充每个单独的按钮。我只知道单击时如何用文本填充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("");
                        }

【问题讨论】:

  • 好吧,你可以做类似this 的事情,或者你可以只使用一张图片
  • 我仍然很困惑>.
  • 所以?不要使用fillOval ,而是使用drawOval。更多关于绘画的详情请关注2D Graphics
  • 我明白了,谢谢=)

标签: java swing colors grid geometry


【解决方案1】:

这可能是一个解决方案

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));

如果您不喜欢它被填充,请将paintIcon 方法中的g2d.fillOval 更改为drawOval

【讨论】:

  • 您忘记定义方法getIconHeight()。也错过了右括号。并且paintIcon方法应该在绘制后恢复Graphics对象中的原点颜色
  • 谢谢,我试一试,它说我需要实现抽象方法 Icon.getIconHeight ,我在哪里做呢?
  • 谢谢@Sergiy Medvynskyy,第一部分是复制和过去的错误,恢复正常添加的代码(即使我很遗憾从未这样做过......),你有一个java doc链接吗?
  • 非常感谢!我会支持你的帖子,但我还没有足够的代表......
猜你喜欢
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
相关资源
最近更新 更多