2012-04-21 61 views
1
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.ImageIcon; 
import javax.swing.JLabel; 

    public class Proyecto_Frame extends JFrame { 
    private ImageIcon Aston; 
    private ImageIcon Ferrari; 
    private ImageIcon Lambo; 
    private ImageIcon McLaren; 
/** 
* 
*/ 
    private static final long serialVersionUID = 1L; 



     public Proyecto_Frame() { 
      super ("Carrera"); 
      this.setLayout(null); 

      Aston = new ImageIcon (getClass().getResource("Aston1.png")); 
      Ferrari = new ImageIcon (getClass().getResource("Ferrari1.png")); 
      Lambo = new ImageIcon (getClass().getResource("Lambo1.png")); 
      McLaren = new ImageIcon (getClass().getResource("McLaren1.png")); 

      final JLabel Aston1 = new JLabel(Aston); 
      final JLabel Ferrari1 = new JLabel(Ferrari); 
      final JLabel Lambo1 = new JLabel(Lambo); 
      final JLabel McLaren1 = new JLabel(McLaren); 

      final JLabel Aston2 = new JLabel(Aston); 
      final JLabel Ferrari2 = new JLabel(Ferrari); 
      final JLabel Lambo2 = new JLabel(Lambo); 
      final JLabel McLaren2 = new JLabel(McLaren); 

      JButton B_Aston = new JButton (Aston); 
      JButton B_Ferrari = new JButton (Ferrari); 
      JButton B_Lambo = new JButton (Lambo); 
      JButton B_McLaren = new JButton (McLaren); 

      B_Aston.setBounds(new java.awt.Rectangle(30,30,230,75)); 
      this.getContentPane().add(B_Aston); 

      B_Ferrari.setBounds(new java.awt.Rectangle(270,30,230,75)); 
      this.getContentPane().add(B_Ferrari); 

      B_Lambo.setBounds(new java.awt.Rectangle(30,110,230,75)); 
      this.getContentPane().add(B_Lambo); 

      B_McLaren.setBounds(new java.awt.Rectangle(270,110,230,75)); 
      this.getContentPane().add(B_McLaren); 

      add(B_Aston); 
      add(B_Ferrari); 
      add(B_Lambo); 
      add(B_McLaren); 

      Aston1.setBounds(30, 250, 230, 75); 
      Aston1.setVisible(false); 
      Ferrari1.setBounds(30, 250, 230, 75); 
      Ferrari1.setVisible(false); 
      Lambo1.setBounds(30, 250, 230, 75); 
      Lambo1.setVisible(false); 
      McLaren1.setBounds(30, 250, 230, 75); 
      McLaren1.setVisible(false); 

      Aston2.setBounds(30, 350, 230, 75); 
      Aston2.setVisible(false); 
      Ferrari2.setBounds(30, 350, 230, 75); 
      Ferrari2.setVisible(false); 
      Lambo2.setBounds(30, 350, 230, 75); 
      Lambo2.setVisible(false); 
      McLaren2.setBounds(30, 350, 230, 75); 
      McLaren2.setVisible(false); 

      add(Aston1); 
      add(Ferrari1); 
      add(Lambo1); 
      add(McLaren1); 

      add(Aston2); 
      add(Ferrari2); 
      add(Lambo2); 
      add(McLaren2); 

      B_Aston.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e){ 
        Aston1.setVisible(true); 
        Ferrari1.setVisible(false); 
        Lambo1.setVisible(false); 
        McLaren1.setVisible(false); 
       } 
      }); 
      B_Ferrari.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e){ 
      Aston1.setVisible(false); 
      Ferrari1.setVisible(true); 
      Lambo1.setVisible(false); 
      McLaren1.setVisible(false); 
      } 
      }); 
      B_Lambo.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e){ 
        Aston1.setVisible(false); 
        Ferrari1.setVisible(false); 
        Lambo1.setVisible(true); 
        McLaren1.setVisible(false); 
       } 
      }); 
      B_McLaren.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e){ 
        Aston1.setVisible(false); 
        Ferrari1.setVisible(false); 
        Lambo1.setVisible(false); 
        McLaren1.setVisible(true); 

       } 

      }); 

     } 

    } 

嘿,我是新来的Java和得到此代码。所以,这里的问题是,我想对这些图像中的两个进行选择,并在按钮下方绘制它们以模拟比赛。当我点击任何Jbutton时,该图像是可见的,其他3个不是,但我无法弄清楚如何离开这个选择并用这些相同的JButton做出下一个选择。谁能帮我?我读过许多主题和许多其他页面,但似乎没有找到答案。如何为任何JButton添加两个不同的事件

谢谢,抱歉的格式,不适用于论坛格式。

回答

1

我倾向于使用JList与禁用JButton开始比赛下面,为此。

将图像放入列表中,并添加list selection listener来检测选择。当选择更改时,请检查selected values array (1.6)selected values list (1.7+)的列表并计算条目。

  1. 如果数等于1,鼓励用户选择另一个(在主GUI,弹出窗口或JOptionPane使用消息JLabel)。
  2. 如果数字等于2,则启用该按钮。
  3. 如果选择3个或更多,禁用该按钮并显示一条基于JOptionPane的错误消息,其效果为“该曲目对于3辆车来说不够大!”。
+0

问题是,我刚刚在Java上工作了大多数1周,并且不了解Java语言上的很多事情,所以我试图让它尽可能简单,尽管它意味着要有一个非常你可能已经看到我已经;尽管我会进一步考虑实施这种方法,谢谢! – VaguitoV 2012-04-22 16:29:05

2

我认为最简单的方法是检查,如果第一选择已经作出,然后让第二个,例如

if (playerA == null) { 
    playerA = buttonSelection; 
} else { 
    playerB = buttonSelection; 
} 

而且你需要一些方法来指示的是与选择用户什么按钮。

2

一个可能的解决方案(我不特别喜欢的)是使用布尔或其他变量来保存你的程序状态,称为boolean autoSelected = false ;.当选择自动时,将此变量更改为true。在JButton的ActionListener中,使用if块根据这个变量的状态来确定代码应该做什么。换句话说,您可以根据程序的状态更改JButton执行的操作。

虽然在我看来只是简单地使用CardLayout交换JPanel并显示一个包含您的轨道和新JButton的JPanel。这是因为您正在从程序的一个主要状态(将游戏设置为另一个状态)转变为显示比赛,这些可能需要以完全不同的JPanel显示。

相关问题