-62 / 0 / 4
Регистрация: 04.08.2015
Сообщений: 389
1

Перенос строки из одного класса в JTextArrea другого класса

08.04.2017, 11:15. Показов 495. Ответов 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
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
public class TestClass1 extends JFrame {
 
    private static boolean permit;
            
//----------------------------------------------------------------------
// создание объектов
    
    private JTextArea input = new JTextArea("input");
    private JScrollPane scrollPaneInput = new JScrollPane(input);
    private JPanel panel1 = new JPanel();
    private JPanel panel2 = new JPanel();
    private JButton start = new JButton("Start");
 
 
    
    // конструктор класса JavaEniseyGraphic (должен иметь класса)
    public TestClass1(){
 
        // инициализация компонентов
        initComponents();
    }
 
    // метод инициализации компонентов формы
    private void initComponents(){
        
        // положение на экране
        setBounds(15,30,800,600);
        // размер формы
        setSize(830, 600);
        // контейнер для размещения компонентов формы
        Container container = getContentPane();
 
        input.setColumns(20);
        input.setRows(10);
        input.setLayout(new BorderLayout());
        input.setSize(20, 20);
       
        panel1.add(BorderLayout.CENTER, scrollPaneInput);
        panel1.setBorder(new CompoundBorder(new EmptyBorder(5, 5, 5, 5), new TitledBorder("Gaphic")));
        panel1.setSize(100, 100);
 
        panel2.setBorder(new CompoundBorder(new EmptyBorder(5, 5, 5, 5), new TitledBorder("Control")));
        panel2.setSize(100, 100);
        panel2.add(start);
 
        // размещение панелей    
        container.add(BorderLayout.CENTER, panel1);
        container.add(BorderLayout.EAST, panel2);
        
        // зарегистрировать экземпляр класса обработчика события start
        start.addActionListener(new startEventListener());
        
    } 
 
    // клас имплементации события нажатия start
    class startEventListener implements ActionListener {
 
        @Override
        // обработка события нажатия на button start
        public void actionPerformed(ActionEvent e) {
            // Флаг открытия pcap
            permit = true;
        }      
    }
    
    // метод получения permit в другой класс
    public boolean getPermit() {
        return permit;
    }  
 
    // метод установки input из другого класса
    public void setInput(String txt) {
        input.setText(txt);
        System.out.println(txt);
    }    
    
}
Второй с потоком который разрешается из первого класса по нажатию на Start
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
public class TestClass2 {
    
    // Поток 
    public class TestThread extends Thread {
 
        private boolean permit;
 
        private TestClass1 testClass1 = new TestClass1();
        
        public TestThread () {
        }
        // переопределение метода run
        @Override
        public void run() {
            while(true)
            {
                try{
                    permit = testClass1.getPermit();
                    //Приостанавливает поток 
                    sleep(500);     
                    if(permit) {
                        testClass1.setInput("Привет из Class2");
                        System.out.println("Привет из Class2");
                    }
        }catch(InterruptedException e){}
            }
        }
    }
    
}
и Main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class JavaApplicationTest {
 
    public static void main(String[] args) {
        
        // объект графической формы
        TestClass1 graphic = new TestClass1();
        // закрытие формы 
        graphic.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 
        TestClass2 testClass2 = new TestClass2(); 
        // объект потока
        TestClass2.TestThread tr = testClass2.new TestThread();
 
        // визуализация формы
        graphic.setVisible(true);
        // старт потока
        tr.start();
 
    }
}
Подскажите пожалуйста почему не работает сеттер testClass1.setInput("Привет из Class2"); который определен как метод переноса строки в окно JTextArrea в классе 1;
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2017, 11:15
Ответы с готовыми решениями:

Как вызвать из одного класса (для метода типа void) метод типа boolean другого класса?
ребят, только учусь и конечно, вопросов возникает много. ситуация вот в чем. есть массив. я должна...

Создать экземпляр одного класса в Main, и передать его в экземпляр другого класса
Добрый день. Подскажите пожалуйста. есть несколько классов-файлов в одном пакете. class one...

Доступ к private-данным одного класса из другого
Как получить доступ к private данных одного класса в другом? В принципе нельзя. Но можешь всеже...

XmlJava. Сериализация класса с полем - массивом объектов другого класса
Есть 2 класса Студент и Академ.группа(с полем - массивом студентов). Необходимо выполнить...

3
Автоматизируй это!
Эксперт Python
4982 / 3431 / 987
Регистрация: 30.03.2015
Сообщений: 10,599
Записей в блоге: 29
08.04.2017, 14:10 2
потому что разные объекты!
Цитата Сообщение от VlGuvin Посмотреть сообщение
TestClass1 graphic = new TestClass1();
и
Цитата Сообщение от VlGuvin Посмотреть сообщение
private TestClass1 testClass1 = new TestClass1();
это разны объекты а тебе надо чтобы это был один!
выриант решения - в конструктор потока передавать аргументом ссылку на класс ТестКласс1, тогда сможешь его менять там.
1
-62 / 0 / 4
Регистрация: 04.08.2015
Сообщений: 389
08.04.2017, 16:10  [ТС] 3
в конструктор потока передавать аргументом ссылку на класс ТестКласс1
Не врубаюсь как это должно выглядеть в коде?
Java
1
2
3
4
5
6
7
...
        // объект графической формы
        TestClass1 graphic = new TestClass1();
...
        // объект потока
        TestClass2.TestThread tr = testClass2.new TestThread(graphic);
...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TestClass2 {
...
    private TestClass1 testClass1;
 
...
    // Поток 
    public class TestThread extends Thread {
 
        public TestThread (TestClass1 testClass1) {
 
        ?????????????
     }
}
...
Добавлено через 58 минут
Врубился. Спасибо
Java
1
2
3
4
5
6
7
       
private TestClass1 testClass1;
..
 public TestThread (TestClass1 testCl1) {
          
            testClass1 = new TestClass1(); 
            testClass1 = testCl1;
Только не понимаю, почему так не работает
Java
1
2
3
4
5
6
private TestClass1 testClass1;
...
        public TestThread (TestClass1 testClass1) {
          
            testClass1 = new TestClass1(); 
            testClass1 = testClass1;
0
Автоматизируй это!
Эксперт Python
4982 / 3431 / 987
Регистрация: 30.03.2015
Сообщений: 10,599
Записей в блоге: 29
08.04.2017, 17:06 4
потому что надо внимательно перечитать про видимость переменных
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2017, 17:06

Объект класса - список объектов другого класса
Есть класс композиция, есть класс CD-диск. CD должен состоять из списка Композиций. Как после...

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

Метод из другого класса
допустим есть класс Editor и метод editor и есть класс Main с методом main как вызвать метод...

Вызвать метод из другого класса
Всем привет. Подскажите что за магия у меня твориться. Есть программа, в которой есть JFrame с меню...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.