2014-12-06 3 views
0

Что касается Вашего комментария, чтобы изменить добавить публичный показ (Graphics г)JAVA, GUI JPanel, JFrame, paintComponent, Графика

[ссылка] http://www3.canyons.edu/Faculty/biblej/project6.html

1.) Project6 класс должен будет расширить класс JFrame 2.) Конструктор Project6 должен будет настроить окно GUI. 3.) Новый абстрактный метод: public void display (Graphics g); должен быть добавлен к базовому и производным классам 4.) Пользовательский JPanel должен быть настроен с помощью метода paintComponent 5.) Новый метод отображения (Graphics g) должен будет нарисовать фигуры в окне графического интерфейса пользователя и вызываться из петля в методе 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); 

Вот один из классов, например, добавьте его до конца так? и мне нужно добавить публичный абстрактный экран void (Graphics g) в родительский класс Shape? и как бы он вызвал в классе 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); } 
+0

Когда я имею в виду, добавив Графика ГИ означает, добавив его в thearray [я]. (GRAPHICS G), и мне также нужно, чтобы дисплей() читал, но я не уверен, как установить оба вместе, потому что он просто говорит, что он не может найти графический символ g –

ответ

3

новый абстрактный метод: общественных недействительного дисплей (график г); должен быть добавлен в базу и производные классы

Вы не сделали этот шаг правильно, потому что я заметил, что вы звоните thearray[i].display(); когда display предназначен иметь параметр.

Если вы создаете метод display правильно, то вы вручаются графический объект, который можно использовать, например:

class Line extends Shape { 
    int x1, y1, x2, y2; 

    @Override 
    public void display(Graphics g) { 
     g.drawLine(x1, y1, x2, y2); 
    } 
} 
+0

OK, поэтому я все еще новичок на веб-сайте и не могу найти способ ответить новыми кодами, так что плохо редактируйте мой пост, показывая вам один из классов, чтобы узнать, правильно ли я сделал это, потому что я думаю, что я пробовал это, и я получал сообщение об ошибке, которое он не мог определить (Графика g) –

+0

* Калифорния nnot ident ... "* Вам, вероятно, нужно импортировать java.awt.Graphics;'. – Radiodef

+0

его не может определить, его нельзя найти символ –

Смежные вопросы