-1
That's my support class 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TrafficLightPanel extends JPanel
{
  private JButton red, amber, green, change;
  private JLabel label, label1;
  private JPanel buttonPanel;

  public TrafficLightPanel ()
  {
    red = new JButton ("Red");
    amber = new JButton ("Amber");
    green = new JButton ("Green");
    change = new JButton ("Change");

    ButtonListener listener = new ButtonListener();
    red.addActionListener (listener);
    amber.addActionListener (listener);
    green.addActionListener (listener);
    change.addActionListener (listener);


    buttonPanel = new JPanel();
    buttonPanel.setPreferredSize (new Dimension(80, 390));
    buttonPanel.setBackground (Color.white);
    label = new JLabel ("Button Panel");
    buttonPanel.add (label);
    buttonPanel.add (red);
    buttonPanel.add (amber);
    buttonPanel.add (green);
    buttonPanel.add (change);
    label1 = new JLabel ("last pressed");
    buttonPanel.add (label1);

    setPreferredSize (new Dimension(200, 400));
    setBackground (Color.blue);
    add(buttonPanel);

    LightPanel panel = new LightPanel();
    add(panel);
    panel.setPreferredSize (new Dimension(80, 390));
    panel.setBackground (Color.cyan);

  }

  private class ButtonListener implements ActionListener
  {
    public void actionPerformed (ActionEvent event)
    {
      if (event.getSource() == red)
        label1.setText("Red");
      buttonPanel.setBackground(Color.red);
      if (event.getSource() == amber)
        label1.setText("Amber");
      buttonPanel.setBackground(Color.orange);
      if (event.getSource() == green)
        label1.setText("Green");
      buttonPanel.setBackground(Color.green);
      if(event.getSource() == change)
        label1.setText("Change");
      buttonPanel.setBackground(Color.white);
    }
  }

  private class LightPanel extends JPanel
  {
    public void paintComponent (Graphics page)
    {
      super.paintComponent(page);
      page.setColor(Color.red);
      page.fillOval(15, 30, 40, 40);
      page.setColor(Color.orange);
      page.fillOval(15, 90, 40, 40);
      page.setColor(Color.green);
      page.fillOval(15, 150, 40, 40);
    }
  }
}

And that's my application class

import javax.swing.JFrame;

public class TrafficLight
{
  public static void main (String[] args)
  {
    JFrame frame = new JFrame("Traffic Light");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.getContentPane().add(new TrafficLightPanel());

    frame.pack();
    frame.setVisible(true);
  }
}

我想问一下,因为我的程序确实做了它应该做的事情,但是我似乎无法让循环将 label1 更改为红色,同时更改 buttonPanel 背景颜色对此有何建议?

4

2 回答 2

4

没有真正检查过代码,但不应该

if (event.getSource() == red)
   label1.setText("Red");
   buttonPanel.setBackground(Color.red);

   if (event.getSource() == red)
    {
       label1.setText("Red");
       buttonPanel.setBackground(Color.red);
    }

这就是为什么总是使用 {} 是个好主意,即使在单行条件句中也是如此。

于 2011-09-19T11:55:25.600 回答
3

据我所知,您需要if用标签封装您的 -statements {},试试这个:

 private class ButtonListener implements ActionListener
  {
    public void actionPerformed (ActionEvent event)
    {
      if (event.getSource() == red)
      {
        label1.setText("Red");
        buttonPanel.setBackground(Color.red);
      }
      if (event.getSource() == amber)
      {
        label1.setText("Amber");
        buttonPanel.setBackground(Color.orange);
      }
      if (event.getSource() == green)
      {
        label1.setText("Green");
        buttonPanel.setBackground(Color.green);
      }
      if(event.getSource() == change)
      {
        label1.setText("Change");
        buttonPanel.setBackground(Color.white);
      }
    }
  }

希望它能解决你的问题!

于 2011-09-19T11:57:24.110 回答