我试图创建一个绘制矩形的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)
}
我有一个类似于油漆的程序.并且我正在尝试实现更改笔颜色,但是当我更改颜色时,当前绘制的所有内容都更改为颜色RED,例如在我的程序中,如何使其不会重绘当前绘制到当前所有内容的所有内容改变颜色?下面的代码将编译并运行
JPanel绘图区域的类
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
//refer to http://jkost.ergoway.gr/jnkjavaconnection/freedraw.html for the algorithm.
public class STDrawingArea extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
ArrayList<Rectangle> dPoint = new ArrayList<Rectangle>();
Point point = new Point(-1,-1);
private Color currentColor;
public STDrawingArea()
{
setBorder(BorderFactory.createLineBorder(Color.black));
setBackground(Color.WHITE);
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e)
{
dPoint.add(new Rectangle(point.x,point.y,e.getX(),e.getY()));
point.x = e.getX();
point.y = e.getY();
repaint();
} …Run Code Online (Sandbox Code Playgroud) 我想在我现有的jPanel上绘制一个简单的行mypanel.我想这样做:
mypanel.drawLine(0,0, 20, 35);
Run Code Online (Sandbox Code Playgroud)
数字是点1的X和Y位置,其他是点2的X和Y位置,点1和点2之间应该是我的线.有没有在我的jFrame上添加额外的jPanel的简单方法?先感谢您.
编辑:
我的GUI代码:
import java.awt.Graphics;
import javax.swing.JPanel;
public class main_panel extends javax.swing.JFrame {
public main_panel() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
panel = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
panel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
javax.swing.GroupLayout panelLayout = new javax.swing.GroupLayout(panel);
panel.setLayout(panelLayout);
panelLayout.setHorizontalGroup(
panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
panelLayout.setVerticalGroup(
panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 163, Short.MAX_VALUE)
);
jButton1.setText("Set Values");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout …Run Code Online (Sandbox Code Playgroud)