Управление экземплярами JFrame

В моем проекте есть один экземпляр jframe1 и два экземпляра jframe2. Затем я хочу обновить компонент jframe1txt2 первого экземпляра jframe2. Но когда я вызываю метод perfomaction(), он должен был обновить второй экземпляр jframe2.

public class Jframe1 extends Jframe {
    public jframe1() {
    Performedaction() {
       jframe2.txt2.setText("do it");
    }
}

public class jframe2 extends Jframe {
    public static JtextFiedl txt2;
    public jframe2() {
}
static вам не друг. Каждый экземпляр jframe2 должен иметь собственный экземпляр txt2, а не общий экземпляр.
MadProgrammer 08.11.2018 10:20

как идентифицировать экземпляр ведьмы JFrame 2 первым или вторым, если вызвать выполняемое действие два раза

IT dev java 08.11.2018 10:25

Сохраните ссылку на оба

MadProgrammer 08.11.2018 10:25

1) Для более быстрой помощи опубликуйте минимальный воспроизводимый пример или Краткий, автономный, правильный пример. Нет какой-то код, который вы быстро набрали, это «что-то вроде» проблема, но код, который имеет правильно написанные заглавные буквы имена классов и будет компилироваться как скопированный. 2) Используйте логичную и последовательную форму отступов строк и блоков кода. Отступы предназначены для облегчения выполнения кода! 3) См. Использование нескольких JFrames, хорошая / плохая практика? 4) Не расширяйте компоненты / окна, если вы можете использовать стандартный экземпляр.

Andrew Thompson 08.11.2018 11:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
68
1

Ответы 1

Вот пример .. В примере используются два окна JFrame, и при нажатии кнопки в одном кадре обновляется второе окно JLabel. В примере используется JLabel вместо JTextField.

Механизм использует интерфейс java.util.Observer и класс Observable для обновления из одного окна в другое.

Код примера:

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

public class TwoFramesExample {
    public static void main(String [] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TwoFramesExample().start();
            }
        });
    }
    private void start() {
        Frame1 f1 = new Frame1();
        new Frame2(f1);
    }
}

class Frame1 implements Observer {
    private JLabel label;
    @Override // Observer interface's implemented method
    public void update(Observable o, Object data) { 
        label.setText((String) data); // displays new text in JLabel
    }
    Frame1() {  
        JFrame f1 = new JFrame("Frame-1");
        f1.getRootPane().setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));        
        label = new JLabel("Click button in frame-2...");
        label.setFont(new Font("Dialog", Font.PLAIN, 20));  
        f1.add(label);
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setSize(350, 150);
        f1.setLocation(200, 200);
        f1.setVisible(true);
    }
}

class Frame2 {
    private int clicks;
    Frame2(Frame1 f1) {
        // Create Observable and add Observer       
        final MessageObservable observable = new MessageObservable();
        observable.addObserver(f1);
        // Display frame
        JFrame f2 = new JFrame("Frame-2");      
        JButton button = new JButton("Press me");
        button.setFont(new Font("Dialog", Font.PLAIN, 20));
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String data = "button clicks in frame-2: [" + ++clicks + "]";
                observable.changeData(data);
            }
        });     
        f2.add(button);
        f2.setSize(250, 150);
        f2.setLocation(600, 200);
        f2.setVisible(true);
    }
}

class MessageObservable extends Observable {
    MessageObservable() {   
        super();
    }
    void changeData(Object data) {
        // the two methods of Observable class
        setChanged(); 
        notifyObservers(data);
    }
}

Другие вопросы по теме