基本的なアニメーションを作成するアプリケーションを作成しようとしています。私の目標は、グラフィックがペイントされる上部にパネルを配置し、下部に通常のボタンとラベルを配置するパネルを配置することです。
以下に示すコードを実行しましたが、以前に描画した長方形の内側に長方形を描画できません。私の問題は、JPanelを拡張する長方形を描画するためにクラス(Rectangle)を呼び出していることだと思います。つまり、新しい長方形を描画しようとするたびに、前のパネルと重ならない新しいパネルが作成されます。
編集
さらにいくつかの例を調べましたが、同じパネルで必要な形状(この場合は長方形)を生成するためのコードを最終的に思い付くことができました。コードにいくつか変更を加えました。以下は新しいコードです。
L.java
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();
}
//}
}
}
DrawRectangle.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);
}
}
}
新しい問題が発生しました!メソッドに渡した色を使用して、さまざまな色で図形をペイントできないのは何が間違っているのでしょうか。