Java 如何在形状中绘制形状?
我试图建立一个应用程序,我打算创建一些基本的动画。我的目标是在顶部有一个面板,在上面画图形,在下面有一个面板,上面有常规的按钮和标签 我已经完成了下面的代码,但是我没有在以前绘制的矩形中绘制矩形。我相信我的问题是,我调用一个类(Rectangle)来绘制扩展JPanel的矩形,这意味着每次我尝试绘制一个新矩形时,都会创建一个新的面板,而不是与前一个面板重叠 编辑 我已经查看了更多的示例,最后可以根据需要在同一面板上生成形状(本例中为矩形)的代码。我对代码做了一些更改,下面是新代码 L.javaJava 如何在形状中绘制形状?,java,Java,我试图建立一个应用程序,我打算创建一些基本的动画。我的目标是在顶部有一个面板,在上面画图形,在下面有一个面板,上面有常规的按钮和标签 我已经完成了下面的代码,但是我没有在以前绘制的矩形中绘制矩形。我相信我的问题是,我调用一个类(Rectangle)来绘制扩展JPanel的矩形,这意味着每次我尝试绘制一个新矩形时,都会创建一个新的面板,而不是与前一个面板重叠 编辑 我已经查看了更多的示例,最后可以根据需要在同一面板上生成形状(本例中为矩形)的代码。我对代码做了一些更改,下面是新代码 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);
}
}
}
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.geom.Rectangle2D;
导入java.util.ArrayList;
导入javax.swing.JPanel;
类DrawRectangle扩展了JPanel{
私有java.util.List方块;
私有java.util.List颜色;
//私人INTA、startX、startY;
公共提款权(){
squares=新的ArrayList();
颜色=新的ArrayList();
}
公共void addRectangle(intpx,intpy,intpwh,colorpc){//square
添加(新的矩形2D.Double(px,py,pwh,pwh));
颜色。添加(pc);
//这个a=a;
//this.startX=startX;
//this.startY=startY;
}
公共组件(图形g){
图形2d g1=(图形2d)g;
用于(矩形2D矩形:正方形){
系统输出打印项次(颜色);
g1.设置颜色(颜色);
g1.绘制(rect);
}
}
}
现在出现了一个新问题!我做错了什么,我不能使用我传递给方法的颜色来用不同的颜色绘制形状?创建自己的面板状
class MyPanel extends JPanel{
Rectangulo one;
Rectangulo two;
public MyPanel(){
one = new Rect...etc.;
two = new Rect...etc.;
}
public paint(Graphics g){
one.paint(g);
two.paint(g);
//two is overlapping one
}
并将此添加到您的JFrame中
编辑:
…或在JFrame中添加绘画(图形g)和重绘(),在JFrame中重绘面板1
希望它有帮助……嗯,也许可以尝试创建一个JPanel,它接受一组
矩形,然后在面板上画出这些矩形,如下所示:
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class RectangleDrawingTest extends JFrame {
public RectangleDrawingTest() {
createAndShowUI();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
RectangleDrawingTest drawingTest = new RectangleDrawingTest();
}
});
}
private void createAndShowUI() {
setTitle("Rectangle Drawing Test");
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
addComponentsToContentPane(this.getContentPane());
setVisible(true);
}
private void addComponentsToContentPane(Container contentPane) {
Rectangle[] recs = new Rectangle[3];
recs[0] = new Rectangle(100, 100, 150, 100);
recs[1] = new Rectangle(100, 100, 125, 75);
recs[2] = new Rectangle(100, 100, 100, 50);
MyPanel mr = new MyPanel(recs);
contentPane.add(mr);
}
}
class MyPanel extends JPanel {
private final Rectangle[] recs;
public MyPanel(Rectangle[] recs) {
this.recs = recs;
}
@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs);
grphcs.setColor(Color.BLACK);
for (int i = 0; i < recs.length; i++) {
grphcs.drawRect(recs[i].x, recs[i].y, recs[i].width, recs[i].height);
}
}
}
首先,如果你想在一个面板上画多个矩形,你的矩形类不能扩展JPanel类谢谢你的回答!我环顾四周,设法做了一些有效的事情。然而,我有一个新的小问题,介意看看吗?@LuisAfonsoTeixeira问一个问题,得到一个答案,然后在同一篇文章中问另一个问题被认为是不好的形式。如果您需要实时调试会话的帮助,我认为堆栈溢出不是进行调试的最佳位置。我将尝试您所说的方法!谢谢你的回答!我环顾四周,设法做了一些有效的事情。然而,我有一个新的小问题,介意看看吗?公共绘画(图形g){g.setColor(颜色);}我想就是这样。谢谢你的回答!我环顾四周,设法做了一些有效的事情。不过,我有一个新的小问题,介意看看吗?
for( int i=0;i<squares.size();i++) {
// System.out.println(colors);
g1.setColor(colors.get(i));
g1.draw(squares.get(i));
}