我正在从教科书上开展一个项目,而且我被困住了。 目标是:当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.");
}
}
答案 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)
这是非常简单的代码。将sunnyButton
和cloudyButton
作为实例成员。
只需检查动作事件的来源并隐藏源组件并显示另一个组件。
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())并隐藏它