1 Востаннє редагувалося generation (13.03.2015 16:08:41)

Тема: Допоможіть з кодом Java SE

Я не розумію чому виникає помилка:

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class JFrameDemo {
    int x = 70, y = 70;
    
    
    public void go()
    {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        MyDrawPane drawPanel = new MyDrawPane();
        
        frame.getContentPane().add(drawPanel); // ось тут виникає пимилка: no suitable method found for add;
        frame.setSize(300, 400);
        frame.setVisible(true);
        
        for (int i = 0; i < 130; i++)
        {
            x++;
            y++;
            
            drawPanel.repaint(); //тут також помилка. щось тіпа: "не існує методу";
            
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                System.out.println("Error " + e);
            }
        }
        
    } // close method go();

    public static void main(String[] args)
    {
        JFrameDemo fr = new JFrameDemo();
        fr.go();
    }
    
    class MyDrawPane extends JFrameDemo {
        public void paintComponent(Graphics g)
        {
            g.setColor(Color.green);
            g.fillOval(x, y, 100, 100);
        }
    }// close inner class
}// close outer class  

P.S. цей уривок коду взятий з книги: "Head First Java" - а книга 2005 року... можливо технологія вже застаріла так як Я використовую JDK 1.8... Допоможіть, будь ласка))

2 Востаннє редагувалося quez (13.03.2015 16:06:55)

Re: Допоможіть з кодом Java SE

Я вас заспокою: принаймні друга помилка мала з'являтись і в 2005 році теж. В класі MyDrawPane немає метода repaint, так само його немає і в JFrameDemo, від якого MyDrawPane наслідується.

А перша помилка від того, що Component не знає і не може знати про ваші класи JFrameDemo і MyDrawPane.

Подякували: generation1

3 Востаннє редагувалося generation (13.03.2015 16:09:51)

Re: Допоможіть з кодом Java SE

quez написав:

Я вас заспокою: принаймні друга помилка мала з'являтись і в 2005 році теж. В класі MyDrawPane немає метода repaint, так само його немає і в JFrameDemo, від якого MyDrawPane наслідується.

Дякую)) а чому автор книжки не попередив принаймні...? І як можна вирішити другу помилку?

4 Востаннє редагувалося smisha (13.03.2015 16:25:51)

Re: Допоможіть з кодом Java SE

Я думаю, що абo клас JFrameDemo  повинен успадковувати від JFrame, або MyDrawPane повинен успадковувати від JFrame. Тоді метод repaint() буде доступним.

Можливо, що замість

class MyDrawPane extends JFrameDemo 

повинно бути

class MyDrawPane extends JFrame 

Спробуйте зкомпілювати...

Подякували: generation1

5 Востаннє редагувалося generation (13.03.2015 16:53:27)

Re: Допоможіть з кодом Java SE

smisha написав:

Я думаю, що абo клас JFrameDemo  повинен успадковувати від JFrame, або MyDrawPane повинен успадковувати від JFrame. Тоді метод repaint() буде доступним.

Можливо, що замість

class MyDrawPane extends JFrameDemo 

повинно бути

class MyDrawPane extends JFrame 

Спробуйте зкомпілювати...

вийшло)) але помилка перша так і залишилася... зараз спробую по гуглити це питання;
//Вийшло все в мене... потрібно було успадкувати клас JPanel...
Дякую всім за допомогу))))

6

Re: Допоможіть з кодом Java SE

Так і знав, що треба JPanel ))
Кілька ремарок:
- з 5-ї версії Java, це

frame.getContentPane().add(drawPanel); 

можна скоротити до:

frame.add(drawPanel); 

- експлісітне успадковування внутрішнім класом зовнішнього немає сенсу, він і так має доступ до його членів. І взагалі доцільність створення внутрішнього класу в цьому випадку сумнівна, як на мене.
Дивно, що в цій книжці є такі опечатки, вона є однією з найбільш рекoмендованих. Але, напевно, люди, які пишуть текст, і люди, які набирають текст, це різні люди ))

7

Re: Допоможіть з кодом Java SE

smisha написав:

Так і знав, що треба JPanel ))
Кілька ремарок:
- з 5-ї версії Java, це

frame.getContentPane().add(drawPanel); 

можна скоротити до:

frame.add(drawPanel); 

- експлісітне успадковування внутрішнім класом зовнішнього немає сенсу, він і так має доступ до його членів. І взагалі доцільність створення внутрішнього класу в цьому випадку сумнівна, як на мене.
Дивно, що в цій книжці є такі опечатки, вона є однією з найбільш рекoмендованих. Але, напевно, люди, які пишуть текст, і люди, які набирають текст, це різні люди ))

Ну це все ж таки 2005 рік)))) також я зустрічав і такі скоречення, але захотів саме так як написано в книзі... Доречі, Ви маєте якісь програми на Java SE в яких можна подивитись код?))) мені цікаво подивитись на код Java SE інших програмістів)))))

8

Re: Допоможіть з кодом Java SE

Заходьте на github, шукайте проект, який цікавить, завантажуйте код і вивчайте.