JAVA、GUI JPanel、JFrame、paintComponent、图形
Posted
技术标签:
【中文标题】JAVA、GUI JPanel、JFrame、paintComponent、图形【英文标题】:JAVA, GUI JPanel, JFrame, paintComponent, Graphics 【发布时间】:2015-02-04 21:11:41 【问题描述】:关于您的评论更改添加公共显示(图形g)
[链接]http://www3.canyons.edu/Faculty/biblej/project6.html
1.)Project6 类必须扩展 JFrame 类 2.)Project6 构造函数必须设置 GUI 窗口。 3.)一种新的抽象方法:public void display(Graphics g);应该添加到基类和派生类中 4.)必须使用paintComponent方法设置自定义JPanel 5.)新的 display(Graphics g) 方法必须在 GUI 窗口上绘制形状,并从 paintComponent 方法中的循环中调用
public class Project6 extends JFrame
//project6 constructor without parameters to set up new JFrame
public Project6()
add(new NewPanel());
class NewPanel extends JPanel
@Override
protected void paintComponent(Graphics g)
super.paintComponent(g);
//那么这里需要添加Graphics g吗?还是没有?
for(int i = 0; i < thearray.length && thearray[i] != null; i++)
thearray[i].display(**Graphics g**);
public static void main (String [] args)
JFrame frame = new JFrame();
frame.setSize(800, 700);
frame.setTitle("Shapes");
frame.setLocationRelativeTo(null); //Center Frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
例如,这是其中一个类,我是否像这样将其添加到末尾?我需要向 Shape 父类添加一个公共抽象 void display(Graphics g) 吗?以及它如何在 project6 类中调用?
public class Rectangle extends Shape
private int width;
private int height;
public Rectangle()
setWidth(0);
setHeight(0);
setXPos(0);
setYPos(0);
public Rectangle(int xPos, int yPos, int height, int width)
setWidth(xPos);
setHeight(yPos);
setXPos(height);
setYPos(width);
public int getWidth()
return width;
public void setWidth(int width)
this.width = width;
public int getHeight()
return height;
public void setHeight(int height)
this.height = height;
@Override
public void display()
System.out.println("Rectangle: (" + getXPos() + ", " + getYPos() + ") " + " Height: " + height + " Width: " + width);
@Override
public void display(Graphics g)
g.drawRect(getXPos(), getYPos(), width, height);
【问题讨论】:
当我的意思是添加图形 gi 意味着将其添加到数组 [i].display(GRAPHICS G) 中,我还需要 display() 来读取但我不知道如何将两者放在一起因为它只是说它找不到图形 g 符号 【参考方案1】:一个新的抽象方法:public void display(Graphics g);应该添加到基类和派生类中
您没有正确执行此步骤,因为我注意到您在 display
打算有参数时调用了 thearray[i].display();
。
如果您正确创建了display
方法,那么您将获得可以使用的Graphics 对象,例如:
class Line extends Shape
int x1, y1, x2, y2;
@Override
public void display(Graphics g)
g.drawLine(x1, y1, x2, y2);
【讨论】:
好的,所以我对这个网站还是新手,真的找不到用新代码回复的方法,所以我编辑我的帖子,向你展示其中一个课程,看看我是否做得对,因为我认为我试过这个,我收到一个错误,说它无法识别(图形 g) "无法识别..."你可能需要import java.awt.Graphics;
。
不是不能识别,就是找不到符号
等我看看。你需要做thearray[i].display(g);
。
我把 import java.awt.* 和 import javax.swing.* 放在每个使用 public void display(Graphics g) 的类的顶部,然后我把 public abstract void display(Graphics g)在我的父 Shape 类中,当我在每个类中覆盖它并运行它时,它仍然给我一个空的 Shape 窗口以上是关于JAVA、GUI JPanel、JFrame、paintComponent、图形的主要内容,如果未能解决你的问题,请参考以下文章
如何在不覆盖JFrame的情况下将JPanel图形添加到JFrame
java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动