- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的java代码有问题。我想做一个画家程序,但每当我选择一个形状并绘制它时之前绘制的所有形状都变得与此形状相同。这是代码。我知道问题出在 paintComponent
中的 for 语句,但我可以用什么替换它?
class inner extends JPanel implements MouseListener,MouseMotionListener{
private int oldx,oldy,newx,newy;
private Point point1,point2;
private Shape newRec,line1;
Rectangle currRec;
private Vector shape;
private boolean status,status1;
private int count=0;
private Object line;
inner(){
point1=point2=new Point(0,0);
shape = new Vector();
addMouseListener(this);
addMouseMotionListener(this);
}
public void mouseDragged(MouseEvent event) {
point2=event.getPoint();
newx = point2.x;
newy = point2.y;
if(Universal==7){
line = new Object(oldx,oldy,newx,newy);
status = true;
repaint();
}
currRec = new Rectangle(Math.min(point1.x,point2.x),Math.min(point1.y,point2.y),Math.abs(point1.x-point2.x),Math.abs(point1.y-point2.y));
status = true;
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {}
public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent event) {
point1=event.getPoint();
oldx=event.getX();
oldy=event.getY();
}
@Override
public void mouseReleased(MouseEvent event) {
point2=event.getPoint();
newx=event.getX();
newy=event.getY();
//count++;
if(Universal==7){
line1 = new Shape(point1.x,point1.y,point2.x,point2.y);
shape.add(line1);
//Graphics g = getGraphics();
//g.setColor(colour);
//g.drawLine(point1.x,point1.y,point2.x,point2.y);
count++;
repaint();
}
else if(Universal==1||Universal==2||Universal==3||Universal==4||Universal==5||Universal==6){
newRec = new Shape(Math.min(point1.x,point2.x),Math.min(point1.y,point2.y),Math.abs(point1.x-point2.x),Math.abs(point1.y-point2.y));
shape.add(newRec);
count++;
repaint();
}
}
///// the problem is in here
public void paintComponent(Graphics g){
super.paintComponent(g);
Shape c;
g.setColor(colour);
for(int i=0;i<shape.size();i++){
c = (Shape) shape.get(i);
if(Universal==1){
g.drawRect(c.x, c.y, c.w, c.h);
if(status){
g.drawRect(currRec.x, currRec.y, currRec.width, currRec.height);
}
}
if(Universal==2){
g.fillRect(c.x, c.y, c.w, c.h);
if(status){
g.fillRect(currRec.x, currRec.y, currRec.width, currRec.height);
}
}
if(Universal==3){
g.drawRoundRect(c.x, c.y, c.w, c.h, c.w/4, c.h/4);
if(status){
g.drawRoundRect(currRec.x, currRec.y, currRec.width, currRec.height,currRec.width/4,currRec.height/4);
}
}
if(Universal==4){
g.fillRoundRect(c.x, c.y, c.w, c.h, c.w/4, c.h/4);
if(status){
g.fillRoundRect(currRec.x, currRec.y, currRec.width, currRec.height,currRec.width/4,currRec.height/4);
}
}
if(Universal==5){
g.drawOval(c.x, c.y, c.w, c.h);
if(status){
g.drawOval(currRec.x, currRec.y, currRec.width, currRec.height);
}
}
if(Universal==6){
g.fillOval(c.x, c.y, c.w, c.h);
if(status){
g.fillOval(currRec.x, currRec.y, currRec.width, currRec.height);
}
}
if(Universal==7){
g.drawLine(c.x, c.y, c.w, c.h);
if(status){
g.drawLine(line1.x, line1.y, line1.w,line1.h);
}
}
if(Universal==8){
shape.clear();
}
}
}
最佳答案
Universal
只会在任何给定时间成为给定值。
油漆不是累积性的,而是具有破坏性的。
也就是说,每次调用 paintComponent
时,所有以前的内容都会被删除/删除干净,并且您需要“重新绘制”内容。
您不应依赖单个标志,而应将 Shape
添加到某种 List
中,并在 paintComponent
时重新绘制它们。叫做。同样,您可以简单地将“类型”(int
) 添加到 List
并在每次重绘时处理该列表
看看Painting in AWT in Swing油漆过程的解释
关于Java Paint 程序绘制形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426823/
我正在尝试以编程方式创建位图,但发现绘制带阴影的 Rect 会忽略传入的颜色 arg。我已将事情简化为这种情况 - 代码只是绘制了一个旋转的蓝色方 block ,它应该有一个灰色的影子,但影子总是蓝色
我可以轻松使用为 Paint.NET 制作的插件吗?在我自己的 C# 应用程序中(假设我遵守插件许可)? 我的目标是使某些效果自动化,Paint.NET 似乎有很多。 最佳答案 Paint.NET 以
我很好奇这些方法的作用以及如何使用它们,因为除了 Javadocs 中的单句描述之外似乎没有任何细节: setStrokeJoin setStrokeMiter 有人有一些示例代码或好的描述吗? 最佳
这个问题在这里已经有了答案: Error printing image in PyQt (1 个回答) PyQt print QWidget (1 个回答) 关闭 2 年前。 我试图在 QPixmap
我对这个感到困惑。我尝试按照一些人的建议将 QPainter 移动到它自己的 def ,但它给出了完全相同的错误。这是我创建的 def。 def PaintButtons(self): sol
我遇到这个问题,当我执行 repaint() 时,类中的 paint() 或 update() 方法没有被调用。这是代码: public class BufferedDisplay extends C
我一直在阅读关于 chrome 中的关键渲染路径 here和 here .我对这些资源的理解是“合成”步骤发生在主线程之外,并且依赖于之前的“绘制”步骤,该步骤生成要合成在一起的光栅化图层。 但是,当
在我的应用程序中,用户之一有时会出错并且应用程序崩溃。用户向我发送日志: java.lang.IndexOutOfBoundsException at android.graphics.Paint.
我正在编写简单的画图程序,您可以在其中通过拖动鼠标来绘制任何您想要的东西。您可以更改画笔的颜色和大小,但在这个版本中,当我更改画笔的颜色或大小时,当我通过拖动鼠标再次开始绘制时,之前绘制的所有内容也会
我已经实现了可点击的 Recyclerview 项并设置了 android:background="?selectableItemBackground" 以获得点击效果,但是在检查代码时我发现了这个
这是我使用 firemonkey + Delphi XE2 制作的 Delphi 应用程序的示例。 如您所见,您可以使用 Firemonkey 中的视觉样式“样式书”来自定义窗口框架内大多数内容的外观
我想请教您如何在绘画应用程序中实现自由形式的绘画。鉴于命令对象将包含单击、任意拖动和释放,这将如何必然存储在命令中并绘制到位图上下文中? 对于初学者来说,数据是否只是放在一个大列表中的 mousemo
似乎显而易见的答案是否定的,但我还是想找出答案。 如果我的面板中有很多复杂的组件,需要一段时间才能加载,然后在顶部有另一个非常基本的面板,完全覆盖它,背景面板是否仍会在 paint 方法中绘制? 最佳
首先是code: import 'package:flutter/cupertino.dart'; class Test extends StatelessWidget { @override
import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.Ac
我的java代码有问题。我想做一个画家程序,但每当我选择一个形状并绘制它时之前绘制的所有形状都变得与此形状相同。这是代码。我知道问题出在 paintComponent 中的 for 语句,但我可以用什
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
这是代码,正方形会渲染但不会移动,即使它应该渲染每个循环。问题似乎出在 Core 类的 run() 中 package com.game; import java.awt.*; import
这里的问题是调用了paintComponent()方法,它获取了fillRect()所需的变量,但在按下按键后实际上并没有绘制任何东西。我不明白为什么,因为每次按下 D 键时 mato.getPosi
程序未在屏幕上显示我的 Oval。我没有收到任何错误,所以我有点停滞不前。我查看了我的另一个程序,我几乎逐字编写了它。 游戏.java public class Game extends JPanel
我是一名优秀的程序员,十分优秀!