繁体   English   中英

在JButton上绘制图形

[英]Drawing graphics on top of a JButton

我有一种情况,我在GridLayout上有一堆JButton。 我需要每个JButton都有:

  1. 背景图片(但如果需要,保留保持默认按钮的能力)
  2. 由其他类绘制的自定义图形

我对背景图片没有任何问题,因为我使用的是setIcon(),但是我在后台绘图时遇到了问题。 有一次,我能够在按钮顶部绘制,但点击按钮后,图纸消失了。 如何使按钮保持此绘图状态?

基本上,我需要一种方法让我的JButton拥有公共方法,允许另一个类在其上绘制任何内容,例如:

public void drawSomething() {
  Graphics g = this.getGraphics();
  g.drawOval(3,2,2,2);
  repaint();
}

要么

public Graphics getGraphics() {
  return this.getGraphics();
}

然后另一个类可以做到这一点:

button.getGraphics().drawSomething();

后者更像我正在寻找的东西,但第一个同样有用。

有什么办法可以解决这个问题吗? 此外,覆盖父类方法paintComponent()没有帮助,因为我需要每个按钮具有不同的图形。

你可以继承JButton并覆盖paintComponent()。 通过为子类提供外部“画家”,您可以处理具有不同图形的每个按钮。 或者只为每个不同的图形使用不同的子类。

public class MyButton extends JButton {
    private Painter painter;

    public void paintComponent(Graphics g) {
       super.paintComponent(g);
       painter.paint(g);
    }
}

public interface Painter {
    public void paint(Graphics g);
}

你不能只是在按钮上画画,因为下次重新绘制按钮时画面会丢失。

您可以创建BufferedImage并在其上执行自定义绘制,然后在自定义paintComponent(...)方法中绘制图像。

查看自定义绘制方法中的DrawOnImage示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM