如何编程同一个按钮来完成两个任务?

时间:2011-11-04 22:35:29

标签: java swing jbutton

我有一个名为three_button和three_button.setText(“Open”)的按钮;

当用户单击按钮时,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 个答案:

答案 0 :(得分:4)

您可以使用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 :(得分:1)

你有一个包含窗口状态的变量。

用于递增该变量状态的开关盒,在开关中可以应用逻辑?如果已达到最大值,则可以将其设置为1

答案 2 :(得分:0)

怎么样

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
}