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、图形的主要内容,如果未能解决你的问题,请参考以下文章

Java GUI 布局问题

在 JFrame 中将图像绘制到 JPanel

如何在不覆盖JFrame的情况下将JPanel图形添加到JFrame

java中jframe 和jpanel的区别

JFrame / JPanel不会更新重绘或重新验证

java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动