我试图创建一个绘制矩形的JPanel.小组需要绘制很多矩形,但它们不会移动.我的问题的一个解决方案是创建一个包含我已经创建的所有矩形的列表,并在每次调用"Paint"时绘制它们.但是有很多矩形,它会减慢计算机的速度.
我也尝试使用重绘(x,y,高度,宽度)来清理新矩形的空间,但它不起作用.(JPanel不断擦除以前的矩形.)在排序中,我需要绘制每个油漆都不会消失的矩形.或者是一种不会擦除先前绘制的绘画方法,或者不会绘制背景.这是我的JPanel类的一部分:
class MyPanel extends JPanel{
private int x, y, size;
private Color c;
public void DrawRect(int x, int y, int size, Color c){
this.x = x;
this.y = y;
this.size = size;
this.c = c;
repaint();
}
@Override
public void
paint(Graphics g) {
g.setColor(c);
g.fillRect(x, y, size, size);
}
Run Code Online (Sandbox Code Playgroud)
}
我正在用 Java 开发一个简单的绘画应用程序,但 Swing 不想合作。起初,我尝试制作一个包含DrawArea设置面板的 JTabbedPane,但由于某些奇怪的原因,触发了第二个mouseDragged()(以及扩展的 drawArea.repaint() 方法),JTabbedPane 似乎是重复的。想象一下两个相同的选项卡窗格垂直堆叠。我以为这只是 JTabbedPane 中的一些错误,但我使用面板上的 JButtons 将所有内容重写为一个非常简单的自定义菜单,并且发生了完全相同的事情。GUI 并没有真正复制顶部区域;它无法使用,我可以在上面绘画。一探究竟:

编辑:我发现了类似的问题。如果我调用 super.paintComponent(g),问题就会消失(并且 drawArea.setBackground(color) 实际上有效!),但是调用的函数super(对我来说是一个新关键字)基本上会重新绘制 drawArea,因此不再保存绘制轨迹。
如果我绘制一个矩形来填充绘图区域,即使 mouseDragged 仍然被触发,它也会覆盖问题。这是渲染代码:
@Override
public void mouseDragged(MouseEvent e) {
x = e.getX(); y = e.getY();
drawArea.repaint();
}
// (subclass):
class DrawArea extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.WHITE);
g.fillOval(x-3, y-3, 7, 7);
}
}
Run Code Online (Sandbox Code Playgroud)
这是 GUI 代码:
frame = new JFrame("Jadra");
frame.setSize(650, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
menu = new JPanel();
settingsButton = …Run Code Online (Sandbox Code Playgroud) 正如标题所说,我很难在JApplet中绘制一些矩形(填充).确切的目标是拥有一个50x50的表格,当你点击一个目标单元格时,填充它(可能通过绘制一个填充的矩形来完成).我已经完成了关于起点坐标的数学计算,但出于某种原因我不能在MouseClicked方法中绘制新的矩形.有什么建议?
public class Main extends JApplet {
public static final int DIMX = 800;
public static final int DIMY = 800;
public static final int ratio = 16;
Graphics g;
boolean drawing;
public int cX;
public int cY;
public Main() {
JPanel MainFrame = new JPanel();
MainFrame.setPreferredSize(new Dimension(400, 800));
MainFrame.setBackground(Color.LIGHT_GRAY);
JPanel Table = new JPanel();
Table.setPreferredSize(new Dimension(800, 800));
Table.setBackground(Color.LIGHT_GRAY);
add(MainFrame, BorderLayout.EAST);
add(Table, BorderLayout.WEST);
addMouseListener(new clicked());
}
public void paint(Graphics g) {
super.paintComponents(g);
g.setColor(Color.black);
for (int i = 0; i <= …Run Code Online (Sandbox Code Playgroud)