如何在java中单击时使按钮不可见?

时间:2014-05-26 16:26:29

标签: java swing jframe jbutton actionlistener

我正在从教科书上开展一个项目,而且我被困住了。 目标是:当GUI首次出现时,两个按钮都可见,但是当单击一个按钮时,该按钮消失,只有另一个按钮可见。此后只能看到一个按钮;单击按钮时,它会消失,另一个按钮会出现

public class ButtonDemo extends JFrame implements ActionListener
{
    public static final int WIDTH = 400;
    public static final int HEIGHT = 300;

    public ButtonDemo()
    {
        setSize(WIDTH, HEIGHT);
        WindowDestroyer listener = new WindowDestroyer();
        addWindowListener(listener);

        Container contentPane = getContentPane();
        contentPane.setBackground(Color.WHITE);

        contentPane.setLayout(new FlowLayout());

        JButton sunnyButton = new JButton("Sunny");
        sunnyButton.addActionListener(this);
        contentPane.add(sunnyButton);
        JButton cloudyButton = new JButton("Cloudy");
        cloudyButton.addActionListener(this);
        contentPane.add(cloudyButton);
    }

    public void actionPerformed(ActionEvent e)
    {
        String actionCommand = e.getActionCommand();
        Container contentPane = getContentPane();

        if(actionCommand.equals("Sunny"))
        {
            contentPane.setBackground(Color.BLUE);
        }

        else if (actionCommand.equals("Cloudy"))
        {
            contentPane.setBackground(Color.GRAY);


        }
        else
            System.out.println("Error in button interface.");
    }
}

3 个答案:

答案 0 :(得分:3)

使用按钮上的setVisible应该可以正常工作。请尝试以下方法:

将以下行移至ButtonDemo的字段:

JButton sunnyButton = new JButton("Sunny");
JButton cloudyButton = new JButton("Cloudy");

actionPerformed中的if语句更改为:

if(actionCommand.equals("Sunny"))
{
    contentPane.setBackground(Color.BLUE);
    sunnyButton.setVisible(false);
    cloudyButton.setVisible(true);
}
else if (actionCommand.equals("Cloudy"))
{
    contentPane.setBackground(Color.GRAY);
    sunnyButton.setVisible(true);
    cloudyButton.setVisible(false);
}

答案 1 :(得分:1)

这是非常简单的代码。将sunnyButtoncloudyButton作为实例成员。

只需检查动作事件的来源并隐藏源组件并显示另一个组件。

public void actionPerformed(ActionEvent e) {

    if (sunnyButton == e.getSource()) {
        sunnyButton.setVisible(false);
        cloudyButton.setVisible(true);
    } else if (cloudyButton == e.getSource()) {
        sunnyButton.setVisible(true);
        cloudyButton.setVisible(false);
    }
    ...
}

答案 2 :(得分:0)

怎么样?
source.setVisible(false) 

隐藏和

source.setVisible(true) 

显示按钮?

编辑: 你应该得到事件的来源(e.getSource())并隐藏它