2012-04-21 72 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顯示。

相關問題