2013-04-13 68 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);