2013-04-13 71 views
0

我想創建一個程序,其中有4個按鈕和用戶需求匹配在一起這些。Java的操作偵聽器,檢查兩個按鈕是否被按下

因此,如果有4個按鈕:按鈕1,按鈕2,BUTTON3,將Button4和用戶按壓按鈕1和按鈕3然後將按鈕改變顏色。否則他們保持不變。

我已如果動作偵聽器內語句中使用的動作偵聽器和一個可靠的,但我也不太清楚,以便它檢查,如果這兩個按鈕被按下我會怎麼做。

謝謝。

這裏是我的代碼:

import javax.swing.*; 
import java.awt.*; 
import java.awt.Color.*; 
import javax.swing.Box; 
import java.awt.Dimension; 
import java.awt.Insets; 
import java.awt.FlowLayout; 
import java.awt.event.*; 
import javax.swing.border.LineBorder; 
import javax.swing.border.EmptyBorder; 
import javax.swing.BorderFactory; 
import java.io.*; 
import java.net.URL; 
import javax.sound.sampled.*; 


public class test3 extends JPanel { 

    JFrame frame; 
    JPanel panel; 

    public test3() { 

    /*Frame and panel */ 

    frame = new JFrame("Keyboard"); 
    panel = new JPanel(); 

    /* Buttons fot letters*/ 
    final JButton button1 =new JButton("button1"); 
    final JButton button2 =new JButton("button2"); 
    final JButton button3 =new JButton("button3"); 
    final JButton button4 =new JButton("button4"); 

    frame.setVisible(true); 
    frame.setSize(800,600); 
    frame.setLocationRelativeTo(null); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    panel.setLayout(null); 
    panel.setBackground(Color.WHITE); 
    panel.setCursor(new Cursor(Cursor.HAND_CURSOR)); // set the cursor to a hand 

    frame.add(panel); 

    Insets insets = panel.getInsets(); 

    button1.setLayout(null); 
    button1.setBounds(130 + insets.left, 300 + insets.top, 50,50); 
    button1.setBackground(Color.WHITE); 
    button1.setBorder(BorderFactory.createEmptyBorder()); 

    button2.setLayout(null); 
    button2.setBounds(180 + insets.left, 300 + insets.top, 50,50); 
    button2.setBackground(Color.WHITE); 
    button2.setBorder(BorderFactory.createEmptyBorder()); 

    button3.setLayout(null); 
    button3.setBounds(230 + insets.left, 300 + insets.top, 50,50); 
    button3.setBackground(Color.WHITE); 
    button3.setBorder(BorderFactory.createEmptyBorder()); 

    button4.setLayout(null); 
    button4.setBounds(280 + insets.left, 300 + insets.top, 50,50); 
    button4.setBackground(Color.WHITE); 
    button4.setBorder(BorderFactory.createEmptyBorder()); 

    panel.add(button1); 
    panel.add(button2); 
    panel.add(button3); 
    panel.add(button4); 
    } 


    public static void main(String[] args) { 
    new test3(); 
    } 
} 
+0

你去哪裏在你的代碼中使用了ActionListener接口? –

+0

我用它只是一個按鈕,例如。 button1.addActionListener(new ActionListener);當我按下一個按鈕時,我可以讓它做些事情,但是我不能讓它工作,這樣當按鈕1和按鈕3都被按下時,就做一些事情。 – Rachel

+2

無論如何,感謝張貼無關代碼50線和您問題相關的0線。 –

回答

4

由於在同一時間,只有一個動作事件將被解僱,你需要設置每當按下第一次,第二次按鈕1或BUTTON3一個標誌,只要按鈕1 /按鈕3被按下,檢查標誌的狀態,如果它是真的改變按鈕的顏色,否則不改變。另外別忘了到標誌設置爲false,當你會用顏色change.Here做的是代碼:

import javax.swing.*; 
import java.awt.*; 
import java.awt.Color.*; 
import javax.swing.Box; 
import java.awt.Dimension; 
import java.awt.Insets; 
import java.awt.FlowLayout; 
import java.awt.event.*; 
import javax.swing.border.LineBorder; 
import javax.swing.border.EmptyBorder; 
import javax.swing.BorderFactory; 
import java.io.*; 
import java.net.URL; 
import javax.sound.sampled.*; 

public class test3 extends JPanel implements ActionListener { 

    JFrame frame; 
    JPanel panel; 
    boolean flag; 
    String buttonPressed; 
    final JButton button1; 
    final JButton button2; 
    final JButton button3; 
    final JButton button4; 
    Color color1, color2; 

    public test3() { 

    /*Frame and panel */ 

    frame = new JFrame("Keyboard"); 
    panel = new JPanel(); 
    color1 = new Color(0,0,0); 

    /* Buttons fot letters*/ 
    button1 =new JButton("button1"); 
    button2 =new JButton("button2"); 
    button3 =new JButton("button3"); 
    button4 =new JButton("button4"); 

    color2 = button1.getBackground(); 

    frame.setVisible(true); 
    frame.setSize(800,600); 
    frame.setLocationRelativeTo(null); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    panel.setLayout(null); 
    panel.setBackground(Color.WHITE); 
    panel.setCursor(new Cursor(Cursor.HAND_CURSOR)); // set the cursor to a hand 

    frame.add(panel); 

    Insets insets = panel.getInsets(); 

    button1.setLayout(null); 
    button1.setBounds(130 + insets.left, 300 + insets.top, 50,50); 
    button1.setBackground(Color.WHITE); 
    button1.setBorder(BorderFactory.createEmptyBorder()); 

    button2.setLayout(null); 
    button2.setBounds(180 + insets.left, 300 + insets.top, 50,50); 
    button2.setBackground(Color.WHITE); 
    button2.setBorder(BorderFactory.createEmptyBorder()); 

    button3.setLayout(null); 
    button3.setBounds(230 + insets.left, 300 + insets.top, 50,50); 
    button3.setBackground(Color.WHITE); 
    button3.setBorder(BorderFactory.createEmptyBorder()); 

    button4.setLayout(null); 
    button4.setBounds(280 + insets.left, 300 + insets.top, 50,50); 
    button4.setBackground(Color.WHITE); 
    button4.setBorder(BorderFactory.createEmptyBorder()); 

    button1.addActionListener(this); 
    button2.addActionListener(this); 
    button3.addActionListener(this); 
    button4.addActionListener(this); 

    panel.add(button1); 
    panel.add(button2); 
    panel.add(button3); 
    panel.add(button4); 
    flag = false; 
    buttonPressed = ""; 
    } 

    public void actionPerformed(ActionEvent ae) 
    { 
    JButton b = (JButton)ae.getSource(); 
    if(b.equals(button1)) 
     { 
     flag = true; 
     if(buttonPressed.equals("button3")) 
      { 
      if(button1.getBackground().equals(color2)) 
       { 
       button1.setBackground(color1); 
       button3.setBackground(color1); 
       } 
      else 
       { 
       button1.setBackground(color2); 
       button3.setBackground(color2); 
       } 
      flag = false; 
      } 
     buttonPressed = "button1"; 
     } 
    else if(b.equals(button3)) 
     { 
     flag = true; 
     if(buttonPressed.equals("button1")) 
      { 
      if(button3.getBackground().equals(color2)) 
       { 
       button1.setBackground(color1); 
       button3.setBackground(color1); 
       } 
      else 
       { 
       button1.setBackground(color2); 
       button3.setBackground(color2); 
       } 
      flag = false; 
      } 
     buttonPressed = "button1"; 
     } 
    else 
     { 
     flag = false; 
     } 

    } 

    public static void main(String[] args) { 
    new test3(); 
    } 
} 
+0

謝謝,我會試試這個。 – Rachel

+0

我會爲其他兩個按鈕做同樣的事嗎? – Rachel

+0

是什麼意思?我已經添加了一個,另外兩個按鈕。 –

2

您最好使用toogleButtons

final JToggleButton tb1 = new JToggleButton(); 
    final JToggleButton tb2 = new JToggleButton(); 
    final JToggleButton tb3 = new JToggleButton(); 
    final JToggleButton tb4 = new JToggleButton(); 


    ChangeListener stateChangeListener = new javax.swing.event.ChangeListener() { 
     @Override 
     public void stateChanged(javax.swing.event.ChangeEvent evt) { 
      toggleButtonStateChanged(evt); 
     } 

     private void toggleButtonStateChanged(ChangeEvent evt) { 
      if (tb1.isSelected() && tb3.isSelected()) { 
       tb1.setBackground(Color.WHITE); 
       tb2.setBackground(Color.WHITE); 
       tb3.setBackground(Color.WHITE); 
       tb4.setBackground(Color.WHITE); 
      } else { 
       //Set the color to whatever it was before 
      } 
     } 
    }; 

    tb1.addChangeListener(stateChangeListener); 
    tb2.addChangeListener(stateChangeListener); 
    tb3.addChangeListener(stateChangeListener); 
    tb4.addChangeListener(stateChangeListener);