Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 3

Вызов метода класса

12.04.2017, 12:49. Показов 843. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Недавно начал изучать Java, сейчас потребовалось написать программу для учебы(учусь не на программиста), которая считывает данные из файла и по ним строит графики.
Сейчас проблема возникла в том, что я не могу получить значение поля (xCord) одного класса (PanelFiles) из другого (PanelGraph).
Как я понимаю во время вызова метода panelFiles.getxCord() происходит создание нового экземпляра класса PanelFiles. Как мне получить значения хранящихся там уже данных?
Объясните, пожалуйста, что я упустил в процессе изучения. Понимаю, что какая-то элементарная мелочь, но не первый день сижу.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.tkm;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class FirstWindow extends JFrame {
    PanelGraph panelGraph;
    PanelButton panelButton;
    PanelFiles panelFiles;
 
    public static void main(String[] args) {
        new FirstWindow();
    }
 
    FirstWindow() {
        super("Построение графков");
        Container mainCont = getContentPane(); // Создание главного контейнера
        mainCont.setLayout(new BorderLayout()); // Менеджер размещения
 
        panelFiles = new PanelFiles(); // Инициализация панель_Файла
        //   panelButton.setSize(200,500); // размеры панель_Файла
        mainCont.add(panelFiles, BorderLayout.WEST); //добавляем панель_Файла на главный контейнер и задаем размещение
 
        panelGraph = new PanelGraph(/*panelFiles*/); // Инициализация панель_Графика
        panelGraph.setSize(700, 400); // размеры панели графика
        mainCont.add(panelGraph, BorderLayout.CENTER); // добавляем панель_Графика на главный контейнер и задаем размещение
 
        panelButton = new PanelButton(panelGraph); // Инициализация панель_Кнопок
     //   panelButton.setSize(500,150); // размеры панель_Кнопок
        mainCont.add(panelButton, BorderLayout.NORTH); //добавляем панель_Кнопок на главный контейнер и задаем размещение
 
        setSize(900, 600); // размеры Главного_Окна
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
 
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package com.tkm;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
 
public class PanelFiles extends JPanel implements ActionListener{
    private JButton choiseButton;
    private JLabel infoLabel, nPointLabel;
    private JFileChooser fileChooser;
    private int tempFileChoise;
    private File file;
    private ArrayList xCord, yCord;
 
    public ArrayList getxCord() {
        System.out.println("PanelFiles - getxCord - xCord.size = " + xCord.size());
        return xCord;
    }
 
    public ArrayList getyCord() {
        return yCord;
    }
 
    // метод слушателя кнопки
    public void actionPerformed(ActionEvent e) {
        xCord = new ArrayList();
        yCord = new ArrayList();
        xCord.clear();
        yCord.clear();
        if (e.getSource().equals(choiseButton)) { // Источник события совпадает с объектом
            fileChooser = new JFileChooser(); // выбор файла
            tempFileChoise = fileChooser.showOpenDialog(null); // показать диалог открытия файла
            if (tempFileChoise == JFileChooser.APPROVE_OPTION) { //значение возвращаемое по нажатию кнопки "Открыть" из диалога
                file = fileChooser.getSelectedFile(); // получить имя открытого файла
                infoLabel.setText("Выбран файл: " + file.toString());
                try {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                    int i = 0;
                    String str = "";
                    try {
                        while ((str = reader.readLine()) != null) {
                            yCord.add(Float.parseFloat(str));
                            xCord.add(i);
                            i++;
                            System.out.println("XCord.add = " + i);
                        }
                        reader.close(); // закрываем поток буфера
                        // передаём данные для вычисления
                      //  Calculate newCalc = new Calculate(xCord, yCord);
 
                        PanelButton.setButEnable(true); // активируем кнопки Панели_Кнопок
                        System.out.println("PanelFiles - action - xCord.size= " + xCord.size());
 
                    } catch (IOException e2) {
                        System.out.println("IOException");
                    }
                } catch (FileNotFoundException e1) {
                    System.out.println("file sucks!");
                }
            }
            else {
                infoLabel.setText("Для начала работы необходимо открыть файл");
                }
            nPointLabel.setText("Количество точек: " + xCord.size());
        }
    }
 
    PanelFiles() { // конструктор Панели_Файлов
        setLayout(new GridLayout(4, 1)); // менеджер размещения
 
        infoLabel = new JLabel("Выберите файл с параметрами");
        choiseButton = new JButton("Обзор:"); //
        nPointLabel = new JLabel("Количество точек");
        choiseButton.addActionListener(this);
 
 
        add(infoLabel);
        add(choiseButton);
        add(nPointLabel);
 
        System.out.println("PanelFiles");
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.tkm;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class PanelButton extends JPanel implements ActionListener {
    private static JRadioButton butParabola, butProizvodnaya;
    private ButtonGroup bg;
    PanelGraph panelGraph;
 
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(butParabola)) {
         //   System.out.println("butParabola");
            panelGraph.setSw(2);
            panelGraph.repaint();
        }
        else if (e.getSource().equals(butProizvodnaya)) {
         //   System.out.println("butProizvodnaya");
            panelGraph.setSw(3);
            panelGraph.repaint();
        }
    }
 
    PanelButton(PanelGraph pg) { //конструктор Панели_Кнопок
        setLayout(new FlowLayout()); // добавляем менеджер размещений
 
        panelGraph = pg; // инициализация Панели Графика
 
        bg = new ButtonGroup(); // группа для радиокнопок
        //новые кнопки
        butParabola = new JRadioButton("Parabola", false);
        butProizvodnaya = new JRadioButton("Proizvodnaya", false);
        //добавляем кнопки в группу, отключаем активность и вешаем на них слушателя
        bg.add(butParabola);
        butParabola.addActionListener(this);
        butParabola.setEnabled(false);
        bg.add(butProizvodnaya);
        butProizvodnaya.addActionListener(this);
        butProizvodnaya.setEnabled(false);
        // добавляем кнопки на панели для видимости
        add(butParabola);
        add(butProizvodnaya);
 
        System.out.println("PanelButton");
    }
 
    public static void setButEnable(boolean b) {
        butParabola.setEnabled(b);
        butProizvodnaya.setEnabled(b);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.tkm;
 
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
 
public class PanelGraph extends JPanel {
    private int sw;
    private ArrayList xCord;
    PanelFiles panelFiles;
 
    public PanelGraph() {
        sw = 1;
        System.out.println("PanelGraph");
 
    }
 
 //   @Override
    public void paint(Graphics g) {
        super.paint(g);
 
        //panelFiles = new PanelFiles();
 
        // рисуем оси координат
        g.drawLine(50, 50, 150, 50); //линия У
        g.drawLine(100, 80, 100, 180); //линия Х
 
        // рисуем график/производную
        switch (sw) {
            case 1:
                System.out.println("case 1");
                break;
            case 2:
                System.out.println("case 2");
 
             //   xCord = new PanelFiles().getxCord();
                xCord = panelFiles.getxCord();
                System.out.println("PanelGraph - paint - xCord.size= " + xCord.size());
 
                drawPar(g);
 
            //    Calculate calculate = new Calculate(this.xCoord, this.yCoord);
                //   System.out.println(calculate.getMatrixCoef());
              //  g.drawLine(300, 280, 300, 180); //линия Х
                break;
            case 3:
                System.out.println("case 3");
                g.drawLine(100, 280, 100, 180); //линия Х
                break;
        }
 
        System.out.println("PanelGraph - paint");
    }
 
    void drawPar(Graphics g) {
        g.drawLine(300, 80, 100, 180);
        System.out.println("PanelGraph - drawPar");
    }
 
    public void setSw(int sw) {
        this.sw = sw;
    }
}
содержание текстового файла для загрузки просто поток цифр, например:
5
8
11
3
2
10
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2017, 12:49
Ответы с готовыми решениями:

Вызов метода класса
Доброго времени суток! В попытках написать лабораторную работу понаписывал черт его знает чего. Кто поможет разобраться?)) Сама...

Вызов метода из другого класса
Здравствуйте, подскажите как можно создать два класса так, чтобы из второго вызывался метод первого?

Вызов метода из другого класса
Собственно не получается вызвать метод из класса math public class math { int i,a,b,c,n,sum; int A; int...

2
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 3
14.04.2017, 04:03  [ТС]
Не хочу никого напрягать, но реально не понимаю, что я упустил из виду. Как вызвать метод уже существующего класса, а не создавать новый?
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
14.04.2017, 07:38
Тут надо понимать, что необходим доступ к объекту типа PanelFiles из объекта PanelGraph, которые создаются у вас в FirstWindow и размещаются в главном контейнере, создав новый объект в методе paint класса PanelGraph вы просто создаете новый объект, который вообще никак не связан с тем, что был создан в FirstWindow и реально отображается на экране.
Поэтому, делаем переменную panelFiles константой, т.к. врядли она будет меняться и меняем конструктор PanelGraph на:
Java
1
2
3
4
5
6
7
private final PanelFiles panelFiles;
 
public PanelGraph(PanelFiles pnlFiles) {
    this.panelFiles = pnlFiles;
    sw = 1;
    System.out.println("PanelGraph"); 
}
Затем, при создании объекта PanelGraph, передаем в конструктор созданный экземпляр PanelFiles:
Java
1
2
3
4
5
6
7
panelFiles = new PanelFiles(); // Инициализация панель_Файла
//   panelButton.setSize(200,500); // размеры панель_Файла
mainCont.add(panelFiles, BorderLayout.WEST); //добавляем панель_Файла на главный контейнер и задаем размещение
 
panelGraph = new PanelGraph(panelFiles); // Инициализация панель_Графика
panelGraph.setSize(700, 400); // размеры панели графика
mainCont.add(panelGraph, BorderLayout.CENTER); // добавляем панель_Графика на главный контейнер и задаем размещение
Больше нигде не нужно делать new PanelFiles(). Далее в PanelGraph уже работаете с этим объектом, как и хотели:
Java
1
xCord = panelFiles.getxCord();
Для красоты и большей детерминированности можно писать
Java
1
xCord = this.panelFiles.getxCord();
Судя по коду
Java
1
panelGraph = new PanelGraph(/*panelFiles*/); // Инициализация панель_Графика
Мысли были в правильном направлении, возможно немного не хватило знаний, что бы сделать конструктор с параметром. Перегрузка конструктора (если оставить конструктор по умолчанию без параметров) тут, наверное лишнее, т.к. судя по логике, PanelGraph не сможет "существовать" без объекта PanelFiles, поэтому только конструктор с параметром PanelFiles.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.04.2017, 07:38
Помогаю со студенческими работами здесь

Вызов данных из метода другого класса
Добрый день! Подскажите пожалуйста, как решить поставленную самим собой задачу. Суть такова: есть класс "игра" с методом...

Вызов метода из класса используя содержимое переменной
У меня есть переменная х. В переменной х содержится название класса. Как зная название метода вызвать его с помощью этой переменной.

Создание тестового класса (метода) для готового класса в Java
Может я чего-то не понимаю. Так вот.Припустим я создал готовый класс в Java,который выполняет какие-то действия.но его нужно...

Как передать входящее значение одного метода класса на возврат в другой метод того же класса?
Я самый новейший новичок. Помогите.Как передать входящее значение (количество еды) метода feed класса Cat на возврат(return) в метод...

Вызов метода из метода
Наверное нубский вопрос, да, но только начинаю изучать язык и не смог нарыть нужной информации. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru