我试图矩形颜色更改为黑色,但它不工作
我是新来Java
,不知道到底是什么cause.Let我解释问题我试图矩形颜色更改为黑色,但它不工作
我创建一个矩形,和它的工作,然后我想改变它的颜色为黑色的一些测试,但似乎不工作以下是我的代码。 当我从paintComponent
本身调用的方法,然后它的工作,但如果我从任何其他方法做同样的事情,那么它不会改变颜色。我试图调用方法重绘也不过还是一样
public class Meme extends JPanel { Rectangle2D.Float myRect = new Rectangle2D.Float(90, 90, 90, 90);
Graphics2D graphics2d;
public void DRAW() {
graphics2d.setColor(new Color(0, 0, 200));
graphics2d.fill(myRect);
}
public void ChangeColour() {
System.out.println("Called");
graphics2d.setPaint(Color.BLACK);
System.out.println("Called2");
graphics2d.fill(myRect);
System.out.println("Called3");
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
graphics2d = (Graphics2D) g;
graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
DRAW();
}
}
按钮点击监听方法
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { meme1.ChangeColour();
}
回答:
至于我还记得,当你改变一些属性(颜色在这情况),你必须打电话repaint。这将调用paintComponent并再次绘制框架。
在你的情况,我猜测,即使你调用重绘改变颜色后,抽签方法被再次的paintComponent其重置变色回(0,0,200)调用。因此,您在屏幕上看不到任何更改。但是,当你的paintComponent方法调用changeColor(假设调用后绘制),颜色的变化仍然存在,并没有得到重写。
可能的解决方案
只要保持存储在其他地方的颜色。像
Color myColor = new Color(0,0,200);
然后在DRAW:
private void DRAW() { graphics2d.setColor(myColor);
graphics2d.fill(myRect);
}
和ChangeColor:
private void ChangeColour() { myColor = Color.BLACK;
}
希望它能帮助。
回答:
更新像在Swing这
public void ChangeColour() { System.out.println("Called");
graphics2d.setColor(new Color(1, 1, 200));
System.out.println("Called2");
graphics2d.fill(myRect);
System.out.println("Called3");
}
回答:
绘画的功能是被动的和破坏性的。也就是说,任何时候都可能出现涂料过关,其中许多原因是您无法控制的。破坏性意味着,在每次通过涂料时,您都需要重新从头开始重新涂刷整个组件。
在Swing中,你更新你想改变,然后调用repaint
引发新的油漆通状态。
绘画不仅要永远画目前的状态,它不应该尝试改变它
public class Meme extends JPanel { Rectangle2D.Float myRect = new Rectangle2D.Float(90, 90, 90, 90);
private Color color;
public void draw(Graphics2D graphics2d) {
graphics2d.setColor(color);
graphics2d.fill(myRect);
}
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public void ChangeColour() {
color = Color.BLACK;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
graphics2d = (Graphics2D) g.create();
graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
draw(graphics2d);
graphics2d.dispose();
}
}
此外,图形上下文传递给您的组件与所有其他组件共享,所以它的任何显著重要您对环境的变化被撤销的方法存在之前 - 在大多数情况下,它是在Graphics
方面呼吁create
到快照的状态和dispose
(你创建的副本),当你做的只是一个简单的例子
以上是 我试图矩形颜色更改为黑色,但它不工作 的全部内容, 来源链接: utcz.com/qa/260973.html