Java 图形和对象

Java 图形和对象,java,object,graphics,Java,Object,Graphics,好的,我的问题是,为什么我试图用来画矩形的点没有值。我一直想弄明白,但似乎就是弄不明白。有人能看看我的代码,让我知道我做错了什么。非常感谢你能找到答案的人 我的广场班: import java.awt.Graphics; import java.awt.Color; import javax.swing.JPanel; import java.util.Random; import java.awt.*; class Square{ int x1, y1, x3, y3;

好的,我的问题是,为什么我试图用来画矩形的点没有值。我一直想弄明白,但似乎就是弄不明白。有人能看看我的代码,让我知道我做错了什么。非常感谢你能找到答案的人

我的广场班:

import java.awt.Graphics;
import java.awt.Color;
 import javax.swing.JPanel;


import java.util.Random;
import java.awt.*;


class Square{

    int x1, y1, x3, y3;

    int red, green, blue;


    Square (){};

    public double squareArea()
    {

        return Math.abs(x3 - x1) * Math.abs(y3 - y1);
    }

    public void setUpperLeft (int ulx, int uly)
    {
        x1 = ulx;
        y1 = uly;
    }

    public void setLowRight (int lrx, int lry)
    {
        x3 = lrx;
        y3 = lry;
    }

    void setRed(int c){red = c;}

    void setGreen (int c) {green = c;}

    void setBlue (int c){blue = c;}

    void setSquareData(int x1, int y1, int x3, int y3, int red, int green, int blue)
    {
        Random r = new Random();
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();

        for (int i = 0; i < 100; i++)
        {
            x1 = r.nextInt(screenSize.width);
            y1 = r.nextInt(screenSize.height);
            //s[i].setUpperLeft(x, y);

            x3 = r.nextInt(screenSize.width);
            y3 = r.nextInt(screenSize.height);
            //s[i*2].setLowRight(x2, y2);

            red = r.nextInt(255) * 2;
            green = r.nextInt(255) * 2;
            blue = r.nextInt(255) * 3;


        }
    }

    int getRed(){ return red;}

    int getGreen () {return green;}

    int getBlue (){return blue;}


    int getx1()
    {
        return x1; 
    }

    int gety1()
    {
        return y1;
    }

    int getx3()
    {
        return x3; 
    }

    int gety3()
    {
        return y3;
    }


}
} }

您的paintComponent()方法创建一个新的正方形(称为“s”),其大小为零。然后再创建10000个零尺寸的正方形,并尝试绘制100次原始正方形(零尺寸)

您不应该在paintComponent()方法中创建任何方形实例。正如您所写的,每当用户调整帧的大小时,您最终将创建数百万个正方形,当该方法返回时,这些正方形将立即被丢弃。 下面是一个绘制矩形的示例:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Draw extends JPanel {

   JFrame          frame;
   ArrayList<Item> items = new ArrayList<>();
   static Random   r     = new Random();

   public Draw() {
      setPreferredSize( new Dimension( 300, 300 ) );
   }

   public void addItem( Item s ) {
      items.add( s );
      repaint();
   }

   /**
    * Adds a Item of random size and color.
    */
   public void addItem() {
      int w = getWidth();
      int h = getHeight();

      int sx = r.nextInt( w );
      int sw = sx + r.nextInt( w - sx );

      int sy = r.nextInt( h );
      int sh = sy + r.nextInt( h - sy );
      int red = r.nextInt( 255 );
      int green = r.nextInt( 255 );
      int blue = r.nextInt( 255 );
      Color c = new Color( red, green, blue );
      Item s = new Item( sx, sy, sw, sh, c );
      addItem( s );
   }

   @Override
   public void paintComponent( Graphics g ) {
      super.paintComponent( g );
      for (Item s : items) {
         g.setColor( s.c );
         g.fillRect( s.x, s.y, s.width, s.height );
      };
   }

   public static void main( String[] args ) {
      SwingUtilities.invokeLater( new Runnable() {
         @Override
         public void run() {
            JFrame jf = new JFrame();
            jf.getContentPane().setLayout( new FlowLayout() );
            jf.addWindowListener( new WindowAdapter() {
               @Override
               public void windowClosing( WindowEvent arg0 ) {
                  System.exit( 0 );
               }
            } );
            Draw t = new Draw();
            jf.add( t );
            jf.pack();
            jf.setVisible( true );

            // Now add some rectangles

            for (int i = 0; i < 10; i++) {
               t.addItem();
            }
         }
      } );
   }

   class Item {
      int   x;
      int   y;
      int   width;
      int   height;
      Color c;

      public Item( int x1, int y1, int w, int h, Color c ) {
         x = x1;
         y = y1;
         width = w;
         height = h;
         this.c = c;
      }
   }
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.Graphics;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.util.ArrayList;
导入java.util.Random;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类Draw扩展了JPanel{
JFrame框架;
ArrayList items=新建ArrayList();
静态随机r=新随机();
公众抽签(){
setPreferredSize(新尺寸(300300));
}
公共无效附加项(项目s){
项目。添加(s);
重新油漆();
}
/**
*添加随机大小和颜色的项目。
*/
公共无效附加项(){
int w=getWidth();
inth=getHeight();
int sx=r.nextInt(w);
int sw=sx+r.nextInt(w-sx);
int sy=r.nextInt(h);
int-sh=sy+r.nextInt(h-sy);
int red=r.nextInt(255);
int绿色=r.nextInt(255);
int蓝=r.nextInt(255);
颜色c=新颜色(红色、绿色、蓝色);
项目s=新项目(sx、sy、sw、sh、c);
补充项目;
}
@凌驾
公共组件(图形g){
超级组件(g);
用于(项目s:项目){
g、 setColor(s.c.);
g、 fillRect(s.x、s.y、s.width、s.height);
};
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame jf=新JFrame();
jf.getContentPane().setLayout(新的FlowLayout());
addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(WindowEvent arg0){
系统出口(0);
}
} );
绘图t=新绘图();
jf.添加(t);
jf.pack();
jf.setVisible(真);
//现在添加一些矩形
对于(int i=0;i<10;i++){
t、 addItem();
}
}
} );
}
类项目{
int x;
int-y;
整数宽度;
内部高度;
颜色c;
公共项目(内部x1、内部y1、内部w、内部h、颜色c){
x=x1;
y=y1;
宽度=w;
高度=h;
这个.c=c;
}
}
}

您可能希望在问题中更加精确,或者至少,提出一个问题。为什么它没有画任何东西,为什么我的值中没有值?它们没有值,因为你从来没有在它们中设置过任何值。我在Square类中设置它们,或者至少我想我没有看到对任何方法的调用,这些方法会为你创建的任何正方形设置大小或颜色。
 import javax.swing.JFrame;
 import java.awt.*;
 class Main{

 public static void main(String[] args)
 {
    Square s = new Square();
            JFrame frame = new JFrame("Squares");
            Draw myDraw = new Draw();
            Dimension screenSize =           Toolkit.getDefaultToolkit().getScreenSize();

            int screenHeight = screenSize.height;
            int screenWidth = screenSize.width;

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(screenWidth, screenHeight);
            frame.getContentPane().add(myDraw);
            frame.setVisible(true);

    System.out.printf("Poop: %d", s.getx1() ); // was testing the values 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Draw extends JPanel {

   JFrame          frame;
   ArrayList<Item> items = new ArrayList<>();
   static Random   r     = new Random();

   public Draw() {
      setPreferredSize( new Dimension( 300, 300 ) );
   }

   public void addItem( Item s ) {
      items.add( s );
      repaint();
   }

   /**
    * Adds a Item of random size and color.
    */
   public void addItem() {
      int w = getWidth();
      int h = getHeight();

      int sx = r.nextInt( w );
      int sw = sx + r.nextInt( w - sx );

      int sy = r.nextInt( h );
      int sh = sy + r.nextInt( h - sy );
      int red = r.nextInt( 255 );
      int green = r.nextInt( 255 );
      int blue = r.nextInt( 255 );
      Color c = new Color( red, green, blue );
      Item s = new Item( sx, sy, sw, sh, c );
      addItem( s );
   }

   @Override
   public void paintComponent( Graphics g ) {
      super.paintComponent( g );
      for (Item s : items) {
         g.setColor( s.c );
         g.fillRect( s.x, s.y, s.width, s.height );
      };
   }

   public static void main( String[] args ) {
      SwingUtilities.invokeLater( new Runnable() {
         @Override
         public void run() {
            JFrame jf = new JFrame();
            jf.getContentPane().setLayout( new FlowLayout() );
            jf.addWindowListener( new WindowAdapter() {
               @Override
               public void windowClosing( WindowEvent arg0 ) {
                  System.exit( 0 );
               }
            } );
            Draw t = new Draw();
            jf.add( t );
            jf.pack();
            jf.setVisible( true );

            // Now add some rectangles

            for (int i = 0; i < 10; i++) {
               t.addItem();
            }
         }
      } );
   }

   class Item {
      int   x;
      int   y;
      int   width;
      int   height;
      Color c;

      public Item( int x1, int y1, int w, int h, Color c ) {
         x = x1;
         y = y1;
         width = w;
         height = h;
         this.c = c;
      }
   }
}