Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Классы


Автор: Snik 24.1.2008, 22:14
Добрый вечер!
Подскажите как определить класс от первого (PaintPanel).
Задача стоит так: Разработать два класса первый должен наследоватся от JPanel второй от первого. В каждом из них должен быть переопределен метод paint. И каждый должен иметь несколько конструкторов. 
Пока я не определяю class PaintPanelExt прога копилится а после добавления ошибка (см. ниже)
Правильное ли направление я взял для решения такой задачи ?

Код

import javax.swing.*;
import java.awt.event.*;
import java.awt.*; 
import java.awt.Graphics;
import java.applet.*;
import java.util.*;

class Start {
  Start(){
    JFrame  jfrm = new  JFrame("TEST");
    jfrm.setSize(1200, 600);
    jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
    PaintPanel jpnl = new PaintPanel(1200, 600); 
    //PaintPanelExt jpnlExt = new PaintPanelExt(600, 220, 6); 

    JTabbedPane jtp = new JTabbedPane();
    jtp.addTab("test № 1",jpnl);
    jfrm.getContentPane().add(jtp);
    jfrm.setVisible(true);
  }  

  public static void main(String[] args){ 
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        new Start();
      }
    }); 
  }
}

class PaintPanelExt extends PaintPanel{  
    int step; 
    protected void paintComponent(Graphics g) {
    for (int i=0; i<getWidth(); i+=step){
      g.drawLine(20, 20, 20+step, 100+step);
    }
  }
}

class PaintPanel extends JPanel {
    
  PaintPanel(int w, int h) {
    setOpaque(true);
    setBorder(BorderFactory.createLineBorder(Color.GREEN, 3));
    setPreferredSize(new Dimension(w, h));
    JLabel      lbl0      = new JLabel("Ввести строку:");
    add(lbl0);
  }
  protected void paintComponent(Graphics g) {
    for (int i=0; i<getWidth(); i+=4){
      g.drawLine(20, 20, 20, 120);
    }
  }
}    


C:\Program Files\Java\jdk1.6.0_03\bin>javac.exe Start.java
Start.java:32: cannot find symbol
symbol  : constructor PaintPanel()
location: class PaintPanel
class PaintPanelExt extends PaintPanel{
^
1 error

Автор: Aristotelb 24.1.2008, 22:41
Очевидно в классе PaintPanel он хочет видеть конструктор без параметров, о чем и сообщает.

Автор: powerOn 24.1.2008, 22:50
Модератор: Название темы должно отражать ее суть! Либо меняем название темы, либо она пойдет в мусорку.

 Правила форума: http://forum.vingrad.ru/index.php?act=boardrules

Автор: Snik 24.1.2008, 23:07
Непойму как сменить тему....  

А как правильно записать классы чтобы через new создавать хоть PaintPanel  хоть PaintPanelExt ?

Автор: v2v 24.1.2008, 23:12
Цитата(Snik @  24.1.2008,  22:14 Найти цитируемый пост)
Пока я не определяю class PaintPanelExt прога копилится а после добавления ошибка (см. ниже)
Правильное ли направление я взял для решения такой задачи ?

архитектура правильная, только вот разберись с конструкторами. необходимо помнить что если ты создал в классе конструктор с параметрами, то в классе наследнике должен тоже перегрузить конструктор , иначе он будет обращатся к родительскому не существующему конструктору без параметров.

Автор: Snik 24.1.2008, 23:38
Цитата(v2v @ 24.1.2008,  23:12)
в классе наследнике должен тоже перегрузить конструктор 

неполучается туплю .... как это?
Код

class PaintPanelExt extends PaintPanel{  
    int step; 

    PaintPanelExt(int w, int h, int step){
    this.w = w;
    this.h = h;
    this.step = step;
    }
    protected void paintComponent(Graphics g) {
    for (int i=0; i<getWidth(); i+=step){
      g.drawLine(20, 20, 20+step, 100+step);
    }
  }
}

тоже ошибки...

Автор: Aristotelb 25.1.2008, 00:07
Код

class PaintPanelExt extends PaintPanel{  
    int step; 
    PaintPanelExt(int w, int h, int step){
        super(w,h);
        this.step = step;
    }
    protected void paintComponent(Graphics g) {
    for (int i=0; i<getWidth(); i+=step){
      g.drawLine(20, 20, 20+step, 100+step);
    }
  }
}

Автор: powerOn 25.1.2008, 00:41
Модератор:  Напишите новое название мне в личку или прямо тут. Я все отредактирую и тему от оффтопа почищу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)