我正在尝试构建一个应用程序,我打算在其中创建一些基本动画。我的目标是在顶部有一个用于绘制图形的面板,在下方有一个带有常规按钮和标签的面板。
我已经完成了下面提供的代码,但我无法在先前绘制的矩形内绘制矩形。我相信我的问题是我正在调用一个类(矩形)来绘制扩展 JPanel 的矩形,这意味着每次我尝试绘制一个新矩形时,都会创建一个新面板,而不是与前一个面板重叠!
编辑
我查看了更多示例,最后可以想出一个代码来生成形状(本例为矩形),因为我需要它们在同一个面板上。我对代码做了一些更改,下面是新代码。
爪哇
import java.awt.Color;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
class L extends JFrame {
public static final int ww = 1000;
public static final int wh = 600;
public static final String wt = "Teste";
Container pane = getContentPane();
DrawRectangle rectangle = new DrawRectangle();
public L() {
setSize(ww,wh);
this.setTitle(wt);
Sim();
pane.add(rectangle);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void addRectangle(int px, int py, int pwh, Color pc) {
this.rectangle.addRectangle( px, py, pwh, pc);
}
public void Sim() {
addRectangle(100,100,250,Color.red);
addRectangle(200,200,50,Color.green);
}
public static void main(String[] args) {
L l = new L();
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
} catch (InstantiationException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
//}
}
}
绘制矩形.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import javax.swing.JPanel;
class DrawRectangle extends JPanel {
private java.util.List<Rectangle2D> squares;
private java.util.List<Color> colors;
//private int a, startX, startY;
public DrawRectangle(){
squares = new ArrayList<Rectangle2D>();
colors = new ArrayList<Color>();
}
public void addRectangle(int px, int py, int pwh, Color pc) { // square
squares.add( new Rectangle2D.Double(px, py, pwh, pwh) ) ;
colors.add(pc);
//this.a = a;
//this.startX = startX;
//this.startY = startY;
}
public void paintComponent(Graphics g) {
Graphics2D g1 = (Graphics2D) g;
for( Rectangle2D rect : squares ) {
System.out.println(colors);
g1.setColor(colors);
g1.draw(rect);
}
}
}
现在又出现了一个新问题!我做错了什么,我不能使用我传递给方法的颜色来绘制不同颜色的形状?