【问题标题】:Overriding paint component can only change color [duplicate]覆盖油漆组件只能改变颜色[重复]
【发布时间】:2021-01-21 00:09:09
【问题描述】:

我的代码覆盖了paintComponent 方法来为GUI 着色,它只有一个矩形矩形。然而,我发现我可以在函数中设置颜色,但任何其他类型的格式都没有任何效果。我不能给它一个边框(这是我的主要目标),我什至不能让颜色更亮。我到底错过了什么?

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;
    if (isFirstTime) {
        area = new Rectangle(dim);
        rect.setLocation(50, 50);
        isFirstTime = false;
    }

    g2d.setColor(Color.blue.brighter().brighter());
    g2d.setStroke(new BasicStroke(100));
    g2d.fill(rect);
}

这里的总体目标基本上是能够突出显示一个被选中的对象,但我删除了其他所有内容以归结为基本问题。

【问题讨论】:

  • rect Rectangle(Dimensions)?
  • @Luke 这是Rectangle(x, y, height, width)
  • 对于颜色,您可以查找 RGB 值并说 Color color = new Color(RGBvalue) 以获得正确的颜色并将 color 传递给 .setColor
  • 我依稀记得如果你使用十六进制,你也可以设置不透明度,这可能有助于突出显示
  • 我也相信您需要将Shape 传递给.fill 方法

标签: java swing user-interface paintcomponent


【解决方案1】:

可以通过Color color = new Color(float R, float G, float B, float A /*RGB value and alpha value for opacity*/) 操作颜色,我认为您需要将Shape 而不是Rectangle() 传递给.fill 方法。 https://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html#setStroke(java.awt.Stroke) 这是 Graphics2D 的文档。 https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html 这是 Color 的文档。

【讨论】:

  • 既然我的目标是突出矩形,那么如果不使用.fill,我该如何应用样式呢?我将Rectangle 转换为Shape 吗?另外,如果我可以有一种方法来简单地突出显示给定形状(例如使其更亮或有边框)而不是为其分配恒定颜色,我会更喜欢,因为我的实际代码有多个不同颜色的矩形。另外,这确实不能回答为什么paintComponent 只能更改颜色的原始问题,除非这与错误使用.fill 有关,我需要更多解释
  • 您链接的文档说Sets the Stroke for the Graphics2D context.。我设置了中风,结果明显没有任何不同。这就是我要解决的问题
  • 改变不透明度可以解决问题,也许,如果我能做到这一点独立于设置一个恒定的颜色
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2012-06-27
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多