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;
}
}
}