【问题标题】:SWING - Different colors in same JPanelSWING - 同一个 JPanel 中的不同颜色
【发布时间】:2016-07-07 22:28:19
【问题描述】:

我是 Swing 的新手,我正在尝试显示一个 JPanel,其中包含一些图形。我绘制它们覆盖了类 Graphics 中的 PaintComponent 方法,但我希望它们中的每一个都有不同的颜色。我的问题是我只能设置JPanel的颜色,里面所有的图形颜色都是一样的。

有人知道我该怎么做吗?如果可能的话,无需为每张图片创建一个 JPanel。谢谢!

编辑:这是我的一段代码:

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.setColor(Color.RED); 
    g.fillOval(524, 45, 34, 34); 
    g.fillOval(615, 45, 34, 34); 
    g.fillOval(396, 233, 34, 34);  
    g.fillOval(746, 233, 34, 34); 
}

当然像这样我无法区分圆圈之间的差异,还有另一种方法来绘制它们之间的差异吗?

【问题讨论】:

  • 请帮助我们通过显示您的相关代码并显示您为解决它而尝试做的事情,或者只是在您的代码尝试中让您感到困惑的事情来帮助您。最好能创建并发布minimal reproducible examplesscce。请查看这些有价值的链接。
  • 你可以使用setColor(Color c)方法设置不同的颜色
  • 请将您的代码作为对原始问题的编辑发布,而不是作为评论,因为这些信息太重要而不能被隐藏在 cmets 中,并且 cmets 不允许您格式化代码。另外,请再次阅读我提供的链接,因为您发布的代码似乎不足以满足我们的需要。
  • @HovercraftFullOfEels,重构是个好主意,但对于他正在做的事情可能有点过头了。听起来他现在才刚刚开始学习,所以一个很好的实验是先绘制某物,然后再将其分解为完整的 OO。
  • @HovercraftFullOfEels 我知道了,谢谢,我只是想在视觉上为自己做这件事,然后在我的代码中应用:)

标签: java swing graphics jpanel


【解决方案1】:

这是一个简单的paintComponent方法示例

@Override
protected void paintComponent(Graphics g) {
    g.setColor(new Color(5,5,5));
    g.fillRect(0,0,100,100);
    g.setColor(Color.Green);
    g.drawRoundRect(30,30,20,20,5,5);
    g.setColor(new Color(200,200,200));
    g.setFont(new Font("Eras Bold ITC", Font.BOLD, 150));
    g.drawString("hi",25,25);
}

提示:

revalidate();
repaint();

将重新绘制框架的每个组件

【讨论】:

  • 谢谢,忘记注释了。
  • 还有protected。避免让代码变得更加可见。 1+
  • 谢谢,我不知道我能做到这一点! :) 效果很好!
  • “完美运行!”如果它有助于解决问题,请accept the answer
  • Nick:方法必须被保护吗?不,当然不是,但作为一种良好做法,如果不需要提升知名度,应该避免提升知名度。 OOP 设计的全部理由是降低复杂性,包括圈复杂性,因为这降低了错误的风险,而公共方法和字段极大地有助于增加这一属性。是的,我在这里可能过于严格,但我喜欢在为新手发布答案时鼓励良好的做法。
猜你喜欢
  • 2012-08-24
  • 2018-01-22
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 2021-05-26
相关资源
最近更新 更多