2014-01-18 4 views
0

рассмотрим следующий код.Манипулирование GUI-объектами в java

import edu.cmu.ri.createlab.terk.robot.finch.Finch; 
import javax.swing.JFrame; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class RobotControl extends JFrame { 
    public static void main (String args[]) { 

    RobotControl GUI = new RobotControl(); 
    GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    GUI.setSize(500,500); 
    GUI.setVisible(true); 
    GUI.setTitle("RobotControl"); 
} 

//The following are declarations of object variables. 
    private Finch myf; 
    private JButton front; 
    private JButton back; 
    private JButton left; 


public RobotControl() { 
    myf = new Finch(); 
    setLayout (new FlowLayout()); 


    front = new JButton("front"); 
    add(front); 
    front.addActionListener(new FrontButtonListener(myf)); 
    back = new JButton("back"); 
    add(back); 
    back.addActionListener(new BackButtonListener(myf)); 
    left = new JButton("left"); 
    add(left); 
    left.addActionListener(new LeftButtonListener(myf)); 

    } 
public class FrontButtonListener implements ActionListener { 
    public FrontButtonListener(Finch myf) { 
     // TODO Auto-generated constructor stub 
    } 
       public void actionPerformed(ActionEvent arg0) { 
        myf.setWheelVelocities(100,100,10000); 
       } 
    } 
public class BackButtonListener implements ActionListener{ 
    public BackButtonListener(Finch myf){ 
    } 
       public void actionPerformed(ActionEvent arg0) { 
        myf.setWheelVelocities(-100,-100,10000); 
       } 
    } 
public class LeftButtonListener implements ActionListener{ 
    public LeftButtonListener(Finch myf){ 
    } 
       public void actionPerformed(ActionEvent arg0){ 
        myf.setWheelVelocities(0, 200, 1000); 
       } 

Теперь, код выше создаст графический интерфейс с тремя кнопками, спереди, сзади и слева. Мне нужно несколько советов о том, как заставить программу ждать нажатия всех трех кнопок до ее запуска, а не щелчка по одной кнопке за раз.

ответ

0

Следите за количеством из них, которые уже были нажаты (с int). Чтобы сделать это, увеличьте значение int только при нажатии кнопки, которая еще не была нажата (вы можете отслеживать это с помощью boolean). Когда int равно 3, независимо от того, в каком порядке были нажаты кнопки, вызовите внешний метод, который выполняет то, что в настоящее время используется в методах 3 actionPerformed. Нечто подобное для левой кнопки, а так же для остальные:

public void actionPerformed(ActionEvent arg0) { 
     if(!leftClicked) { 
      leftClicked = true; 
      numButtonsClicked++; 
     } 
     countLeftButtonClicks++; 
     if(numButtonsClicked == 3) { 
      newMethodThatWritesToLogFileToo(); 
     } 
    } 
+0

Что делать, если я хочу, чтобы кнопка нажала больше загар один раз? – Hustl3r28

+0

Хотите ли вы отслеживать, сколько раз каждую из кнопок были нажаты и выполняли действия для этой кнопки, что много раз в конце концов, когда все 3 были нажаты? –

+0

Я хочу выполнить действия после того, как все три кнопки были нажаты, независимо от порядка или количества нажатий на кнопку, и в конце отправьте журнал в txt-файл с указанием команд или кнопок, которые были выполнены. – Hustl3r28

1

Создать boolean переменные для каждого button и позволяют им верно, когда их correspoding нажата кнопка.

private boolean firstClicked = false; 
private boolean secondClicked = false; 
private boolean thirdClicked = false; 
...... 
...... 
//set these boolean values in their onClick actionPerfomed method 
if(firstClicked && secondClicked && thirdClicked){ 
//do whatever operations you want after three buttons have been clicked 
} 

Примечание: Вы должны иметь эти логические переменные уровня класса

1

JToggleButton использования или JCheckBox сохранить состояние каждой кнопки. Предполагая, что в List<JToggleButton> имени list, можно вычислить allTrue предикат следующим образом:

boolean allTrue = true; 
for (JToggleButton b : list) { 
    allTrue &= b.getSelected; 
} 

Включите нужные функции только тогда, когда allTrue является true. Соответствующий пример показан here.

Смежные вопросы