Как запустить метод в JFrame, нажав кнопку в JDialog?

У меня есть JFrame (называемый FTask) с методом public void. Пример кода:

public void clear() {
    jTable1.clearSelection();
    jButton1.setEnabled(false);
    jButton3.setEnabled(false);
    jButton2.setEnabled(false);
    jTextArea1.setText(null);
}

Затем у меня есть JDialog с кнопкой. Я хочу, чтобы, когда я нажимаю кнопку, фрейм выполнял метод «очистить» для фрейма.

Я пробовал:

FTask ft = new FTask();
ft.clear();

Но это не сработало.


person Adhi Foo    schedule 26.05.2016    source источник
comment
это не сработало - как? Что случилось? Была ли ошибка?   -  person Idos    schedule 26.05.2016
comment
@Idos ничего не изменилось, когда я нажимаю кнопку .. :(   -  person Adhi Foo    schedule 26.05.2016
comment
Ну, это потому, что ваш код не запускается при нажатии кнопки. Возможно, вы захотите добавить несколько слушателей, а затем добавить свой код в один из них. ( stackoverflow.com/questions/ 9014704/ )   -  person Idos    schedule 26.05.2016
comment
Куда вы поместили этот фрагмент кода?   -  person exilit    schedule 26.05.2016
comment
@exilit в кнопке (jbutton), потому что я хочу, чтобы, когда я нажимаю кнопку, в jframe запускался метод «очистить».   -  person Adhi Foo    schedule 26.05.2016
comment
как я понимаю, вызов происходит внутри диалога, поэтому вам нужно передать экземпляр JFrame в диалог, чтобы он мог вызвать clear(), а создание нового экземпляра из FTask и вызов clear() НЕ повлияют на текущий экземпляр. возможно, если вы покажете код JDialog, может быть предоставлена ​​​​дополнительная помощь   -  person Yazan    schedule 26.05.2016


Ответы (3)


Я пробовал:

    FTask ft = new FTask();
    ft.clear();

Но это не сработало.

Нет, не будет. Этот код создает новый (второй экземпляр) фрейма, который не отображается. Вам нужна ссылка на исходный фрейм.

Это можно исправить несколькими способами, слишком общими, чтобы вдаваться в них, и это объектно-ориентированное программирование 101, которое следует освоить, прежде чем пытаться писать приложения с графическим интерфейсом. - которые добавляют свои сложности.

person Andrew Thompson    schedule 26.05.2016

Вы должны использовать actionlistener для запуска кода при нажатии кнопки.

 JButton button = new JButton("Click me");
    //Add action listener to button
    button.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e)
        {
            //Execute when button is pressed

            if(e.getSource() == button){
                System.out.println("You clicked the button");

                //In your case:
                ft.clear();
            }

        }
    });
person MetalJacketNL    schedule 26.05.2016
comment
ты можешь показать мне дорогу? Я пробовал этот код, и он не работал. - person Adhi Foo; 26.05.2016
comment
Что вы имеете в виду под не сработало? Что он сделал? Была ли ошибка? Если да, то какая ошибка? - person FredK; 26.05.2016
comment
@FredK, когда я нажимаю кнопку, метод «очистить ()» не может быть выполнен. - person Adhi Foo; 27.05.2016
comment
Как вы использовали код? Вы просто скопировали и вставили? Вы должны вписать его в свое приложение. Или, может быть, вы используете метод очистки неправильно? - person MetalJacketNL; 16.06.2016

Как сказал @Menno, вы должны использовать ActionListener, чтобы обнаруживать нажатия кнопок.

Вот стиль Java 8:

    JButton button = new JButton("Click me");

    //Add action listener to button
    button.addActionListener(
        ae -> ft.clear();
    );

    // Add button to frame
    add(button);
person Tilak Maddy    schedule 26.05.2016