Java 绘制对象不';按此键后,无法清除上一个矩形
我的代码不会清除上一个矩形。我认为通过使用getRect()然后在我的keyPressed()方法中使用repaint()可以解决这个问题Java 绘制对象不';按此键后,无法清除上一个矩形,java,swing,jframe,paint,keylistener,Java,Swing,Jframe,Paint,Keylistener,我的代码不会清除上一个矩形。我认为通过使用getRect()然后在我的keyPressed()方法中使用repaint()可以解决这个问题 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.KeyEvent; import java.awt.geom.Rectangle2D; import javax.swing.Icon; import java.awt.*; import java.awt.
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.geom.Rectangle2D;
import javax.swing.Icon;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class Rectangle extends JFrame implements KeyListener{
private int height;
private int width;
private int x;
private int y;
private Graphics2D g2;
public Rectangle(int width, int height,int x, int y)
{
this.height = height;
this.width = width;
this.x = x;
this.y = y;
JLabel label = new JLabel();
setSize(1000,1000);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
label.addKeyListener(this);
label.setFocusable(true);
label.setOpaque(true);
label.addKeyListener(this);
this.add(label);
setVisible(true);
label.requestFocusInWindow();
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
g2.clearRect(x, y, width, height);
repaint();
y = y + 5;
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT)
{
g2.clearRect(x, y, width, height);
repaint();
x = x - 5;
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_UP)
{
g2.clearRect(x, y, width, height);
repaint();
y = y - 5;
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
{
g2.clearRect(x, y, width, height);
x = x + 5;
repaint();
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void paint(Graphics g) {
g2 = (Graphics2D) g;
g2.drawRect(x, y, width, height);
}
}
试验方法:
public class Test {
public static void main(String[] args)
{
Rectangle rectangle = new Rectangle(400,200,500,500);
}
}
你能补充一下细节吗?
从我所看到的,你可能想明确一个按钮和方法
setVisible(true)
应该是公共矩形(…
)中的最后一行代码,因为您将JComponent
添加到了已经可见的Swing GUI中JFrame
对于KeyEvent
不可聚焦JPanel
放置到JFrame
的中心
区域,默认情况下:myFrame.add(myPanel)
JPanel
覆盖getPreferredSize
,而不是为JFrame
size设置;应通过调用myFrame.pack()
初始化大小JPanel
必须可聚焦以接收KeyEvent
,setFocusable(true)
;使用键绑定而不是在JComponent
层次结构中搜索焦点JPanel的paintComponent
;第一行代码应该是super.paintComponent
,否则会出现绘制瑕疵
问题是,我不想用按钮清除矩形,而是当我按下箭头键时。如果我按下向上键,我希望矩形向上移动并清除上一个矩形。这有帮助吗?哦,矩形是否重复自身?不要覆盖绘制并直接在JFrame上绘制。而是使用添加到JFrame的JPanel。请看本教程:。另外,您是否可以发布当前正在发生的不受欢迎的事情的图像?