Как запрограммировать одну и ту же кнопку для выполнения двух задач?

У меня есть кнопка с именем three_button и three_button.setText("Открыть");

Когда пользователь нажимает кнопку, фрейм открывается командой setVisible(true). И текст кнопки меняется на Закрыть. Теперь, когда я снова нажимаю эту кнопку, я хочу, чтобы на этот раз рамка была закрыта, потому что рамка уже видна. Код ниже. Я попытался создать другой класс обработчика в том же классе обработчика, но это не сработало, но. Какие-либо предложения?

Другими словами:

if(frame is visible and open) { the button once pressed should close the frame} 

else if (frame is not opened) {the button once pressed should open the frame} 

Вот мой код:

thehandler handler = new thehandler();
three_button.addActionListener(handler);

private class thehandler implements ActionListener{ public void
actionPerformed(ActionEvent event){

TabbedPaneExample frame = new TabbedPaneExample();
frame.setVisible(true);

three_button.setText("Close"); }}

3 ответа

Решение

Ты можешь использовать Action, Вот общий пример:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class Test extends JFrame{

    Action actOne = new AbstractAction("One"){
        public void actionPerformed(ActionEvent e){
            ((JButton)e.getSource()).setAction(actTwo);
        }
    };

    Action actTwo = new AbstractAction("Two"){
        public void actionPerformed(ActionEvent e){
            ((JButton)e.getSource()).setAction(actThree);
        }
    };

    Action actThree = new AbstractAction("Three"){
        public void actionPerformed(ActionEvent e){
            ((JButton)e.getSource()).setAction(actOne);
        }
    };

    public Test(){
        super("Test");
        setLayout(new BorderLayout());
        add(new JButton(actOne), BorderLayout.CENTER);
        setSize(160,120);
    }

    public static void main(String[]args){
        new Test().show();
    }
}

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

Можете ли вы иметь переменную, которая содержит состояние окна.

Случай переключателя для увеличения состояния этой переменной, и в переключателе вы можете применить свою логику? И если он достиг своего максимума, вы можете установить его на 1

Как насчет

if(three_botton.getText().equals("Close"))
{
   //do close action
}

else if(three_botton.getText().equals("Open"))
{
   //do open action
}
else if(three_botton.getText().equals("Other"))
{
   //do other action
}
Другие вопросы по тегам