Доступ к полю String в одном JFrame из другого JFrame [дубликат]

Также, если вы используете сторонние библиотеки, убедитесь, что у вас есть правильные 32/64 битные файлы

1
задан Ronak Joshi 2 September 2013 в 20:59
поделиться

1 ответ

Речь идет о том, «что» вы хотите достичь, что приведет к «как» ...

Например ...

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

public class FirstFrame extends JFrame {
    // Reference to the second frame...
    // You will need to ensure that this is assigned correctly...
    private SecondFrame secondFrame;
    // The text field...
    private JTextField textField;

    /*...*/

    // The action handler for the button...
    public class ButtonActionHandler implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            secondFrame.setLabelText(textField.getText());
        }
    }
}

Проблема с этим заключается в том, что он SecondFrame , позволяя ему делать противные вещи, например, удалять все компоненты, например.

Лучшим решением было бы предоставить серию интерфейсов, которые позволили бы двум классам разговаривать друг с другом ...

public interface TextWrangler {
    public void addActionListener(ActionListener listener);
    public void removeActionListener(ActionListener listener);
    public String getText();
}

public class FirstFrame extends JFrame implements TextWrangler {
    private JButton textButton;
    private JTextField textField;

    /*...*/

    public void addActionListener(ActionListener listener) {
        textButton.addActionListener(listener);
    }

    public void removeActionListener(ActionListener listener) {
        textButton.removeActionListener(listener);
    }

    public String getText() {
        return textField.getText();
    }
}

public class SecondFrame extends JFrame {
    private JLabel textLabel;
    private JTextField textField;
    private TextWrangler textWrangler;

    public SecondFrame(TextWrangler wrangler) {
        textWrangler = wrangler;
        wrangler.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                textLabel.setText(textWrangler.getText());
            }
        });
        /*...*/
    }
}

В основном это ограничивает доступ к SecondFrame. Хотя можно утверждать, что ActionListener в SecondFrame может использовать источник ActionEvent, чтобы узнать больше информации по своей природе, это был бы ненадежный механизм, так как interface не упоминает, как это должен быть реализован ...

Это основной пример Pattern наблюдателя

7
ответ дан MadProgrammer 24 August 2018 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: