Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/47: Рейтинг темы: голосов - 47, средняя оценка - 4.55
0 / 0 / 1
Регистрация: 03.05.2015
Сообщений: 7

Передача массива из одного класса в другой

05.06.2016, 14:14. Показов 8959. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 2 файла классов и в одном объявляется массив n элементов.
Как его передать во второй класс? При обращении к элементам массива мне выдается ошибка non static variable...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2016, 14:14
Ответы с готовыми решениями:

Переменную из одного класса в другой
Здравствуйте. Сам я новичок со стажем учил все языки программирования, ни в одном не разбираюсь, но сейчас дошло до дипломной работы....

Передать число из одного класса в другой
Решил проверить, получится ли написать вычислялку по формуле. Вроде все сделал, но не могу передать число из одного класса в другой. Как...

Как передать переменную из одного класса в другой
Есть окружность, а по ней в свою очередь движется точка. Часть кода: import javax.swing.*; import java.awt.*; import...

4
27 / 27 / 24
Регистрация: 23.04.2011
Сообщений: 64
05.06.2016, 14:47
Если возможно, покажите код.

Возможный вариант решения:
Добавить к объявлению ссылки на массив ключевое слово static:
Java
1
public static int[] array = new int[n];
0
0 / 0 / 1
Регистрация: 03.05.2015
Сообщений: 7
05.06.2016, 17:08  [ТС]
Первый класс (GUI)
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
package winbyms;
 
 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JPanel;
 
 
 
public class Window extends JFrame{    
    public int i;
    public int enemies = new Random().nextInt(19) + 6;
    public JButton[] jar = new JButton[enemies + 1];
    public int[][] rar = new int[enemies + 1][3];
    public JButton s = new JButton();
    Window() {
        super("Война с кнопками");
        
        setSize(600, 600);
        setLocation (Math.round((Screen(0) - 600) / 2), Math.round((Screen(1) - 600) / 2));
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        JPanel panel = new JPanel();
        panel.setLayout (null);
        
        for (i = 1; i <= enemies; i++) {
            JButton myBut = new JButton (Integer.toString(enemies));
            jar[i] = myBut;
            rar[i][0] = 1;
            switch  (new Random().nextInt(1)) {
                case 0: rar[i][1] = 1;
                case 1: rar[i][1] = 0;
            }
            switch  (new Random().nextInt(1)) {
                case 0: rar[i][2] = 1;
                case 1: rar[i][2] = 0;
            }
            myBut.setFocusPainted(false);
            myBut.setLocation(new Random().nextInt(526) + 4, new Random().nextInt(503) + 4);
            myBut.setSize(50, 50);
            myBut.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {          
                    Update(myBut, i);
                }
            });
            panel.add(myBut);
        }
        
        setContentPane(panel);
        
    }
    
    private void Update(JButton acBut, int op) {
        enemies--;
        s.setVisible(false);
        s = acBut;
        s.setBackground(Color.red);
        rar[op][0] = 0;
    }
    
    private int Screen(int what) {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Insets scnMax = Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration());
        int taskBarSize = scnMax.bottom;
        int width = screenSize.width;
        int height = screenSize.height - taskBarSize;
        
        switch (what) {
            case 0: return width;
            case 1: return height;
        }
        return 0;
    }
    
}
второй файл
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
package winbyms;
 
import java.util.Random;
import javax.swing.JFrame;
 
 
public class WinByMS{
 
    public static void main(String[] args) {
        JFrame window = new Window();
        window.setVisible(true);
    }
}
вот что нужно добавить во 2-й файл (движение кнопок)
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
    public void UPD() {
        int x, y, randX = new Random().nextInt(100), randY = new Random().nextInt(100);
        while (true) {
            for (i = 1; i <= enemies; i++) {
                if (rar[i][0] == 1) {
                    x = jar[i].getX();
                    y = jar[i].getY();
 
                    if ((x == 4 && rar[i][1] == -1) || (x == 530 && rar[i][1] == 1)) {
                        rar[i][1] *= -1;
                    }
 
                    if ((y == 4 && rar[i][2] == -1) || (y == 507 && rar[i][2] == 1)) {
                        rar[i][2] *= -1;
                    }
 
                    if (randX >= 20) randX = rar[i][1];
                    else randX = -1 * rar[i][1];
 
                    if (randY >= 20) randY = rar[i][2];
                    else randY = -1 * rar[i][2];
 
                    jar[i].setText(Integer.toString(enemies));
                    jar[i].setLocation(x + randX, y + randY);
                }
            }
        }  
    }
0
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
05.06.2016, 18:52
Лучший ответ Сообщение было отмечено inkognit0 как решение

Решение

inkognit0, если Ваш массив объявлен как поле класса (типа как
Java
1
public int[][] rar = new int[enemies + 1][3];
вот здесь), то в классе-получателе следует выполнить следующее:
Java
1
2
        Window obj = new Window();
        int[][] rar =  obj.rar;
и уже использовать полученный массив.
1
27 / 27 / 24
Регистрация: 23.04.2011
Сообщений: 64
05.06.2016, 19:04
Лучший ответ Сообщение было отмечено inkognit0 как решение

Решение

Попробую помочь, но, у меня нет пока опыта работы с GUI (сам все еще изучаю Java)
Попробуйте так:

В первом классе:
Java
1
2
3
4
public static int i;
    public static int enemies = new Random().nextInt(19) + 6;
    public static JButton[] jar = new JButton[enemies + 1];
    public static int[][] rar = new int[enemies + 1][3];
Во втором классе:
Кликните здесь для просмотра всего текста
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
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.plaf.basic.BasicInternalFrameTitlePane;
 
public class WinByMS{
 
    public static void UPD() {
        int x, y, randX = new Random().nextInt(100), randY = new Random().nextInt(100);
        while (true) {
            for (Window.i = 1; Window.i <= Window.enemies; Window.i++) {
                if (Window.rar[Window.i][0] == 1) {
                    x = Window.jar[Window.i].getX();
                    y = Window.jar[Window.i].getY();
 
                    if ((x == 4 && Window.rar[Window.i][1] == -1) || (x == 530 && Window.rar[Window.i][1] == 1)) {
                        Window.rar[Window.i][1] *= -1;
                    }
 
                    if ((y == 4 && Window.rar[Window.i][2] == -1) || (y == 507 && Window.rar[Window.i][2] == 1)) {
                        Window.rar[Window.i][2] *= -1;
                    }
 
                    if (randX >= 20) randX = Window.rar[Window.i][1];
                    else randX = -1 * Window.rar[Window.i][1];
 
                    if (randY >= 20) randY = Window.rar[Window.i][2];
                    else randY = -1 * Window.rar[Window.i][2];
 
                    Window.jar[Window.i].setText(Integer.toString(Window.enemies));
                    Window.jar[Window.i].setLocation(x + randX, y + randY);
                }
            }
        }
    }
 
    public static void main(String[] args) {
        JFrame window = new Window();
        window.setVisible(true);
    }
}



Или как написали выше через объект класса, что возможно более разумно, чем статические переменные
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2016, 19:04
Помогаю со студенческими работами здесь

Как можно передать значения переменных из одного класса в другой?
1) Не могу понять, почему в Borland JBuilder создавая два Фрейма в разных классах при запуске я вижу только одно. package temp1; ...

Передача массива одного класса в другой С++
Доброго времени суток. Столкнулся с проблемой, есть класс который заполняет массив, этот массив нужен в другом классе. Как мне передать...

Передача массива из одного класса в другой
Имеется класс Open.cs в нём есть метод public void OpExcel(string file, Form1 form, IEnumerable sumStrArrayPol) { ...

Передача данных из одного класса в другой
Доброе время суток форумчане =) Пишу класс для общения с php: отправки и получения данных. Но появилась проблема: не очень...

Передача коллекции из одного класса в другой
Добрый день, столкнулся с проблемой... Как реализовать передачу данных коллекции через вспомогательный класс public static...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru