Datorstyrd RC bil med två Arduinos (6 / 8 steg)
Steg 6: Datorprogram: att skapa GUI.
Skapa en klass som utökar JPanel som kommer att användas som våra GUI. Det måste också genomföra ActionListener och KeyListener.
offentliga klassen GUI utökar JPanel genomför ActionListener, KeyListener {
}
I konstruktören för vår klass kommer vi att sätta upp layouten GUI. För att uppnå layouten ovan, kommer vi att använda en 3 av 4 rutnät. Observera att detta inte behöver definieras någonstans, vi berätta bara komponenter vad rutnät rymden att ockupera och nätet skapas därmed. Koden nedan är konstruktören för klassen GUI och innehåller våra GUI layout.
offentliga JButton bFront, bBack, bLeft, ljusa; Definiera knapparna
StyledDocument instructionsText; Detta används för instruktioner
offentliga JTextPane instruktioner; Används också för instruktioner
offentliga GUI() {
setLayout (nya GridBagLayout()); Ange layouten till Grid väska
this.setPreferredSize (nya Dimension(400,400)); //Set storleken på fönstret
GridBagConstraints c = nya GridBagConstraints();
c.Fill = GridBagConstraints.BOTH;
c.GridX = 0; Detta kommer att placera av instruktionerna
c.GridY = 0;
c.gridwidth = 4; Anvisningarna kommer att spänna över 4 brickor
Skapa texten instruktioner
StyledDocument instructionsText = ny DefaultStyledDocument();
Stil defaultStyle = instructionsText.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setAlignment (defaultStyle, StyleConstants.ALIGN_CENTER);
försök {
instructionsText.insertString (0, "styra bilen med hjälp av tangentbordet. \n förändring tangentbindningar genom att klicka på knapparna nedan.", null);
} fånga (BadLocationException e) {
e.printStackTrace();
}
lägga till texten i fönstret
instruktioner = nya JTextPane(instructionsText);
instructions.setFocusable(false);
lägga till fönstret i fönstret
Add(instructions,c);
Skapa framåt-knappen (samma för andra nedan)
bFront = ny JButton ("framåt-knappen:" + KeyEvent.getKeyText(frontKey));
bFront.setActionCommand("forward");
bFront.addActionListener(this);
bFront.setFocusable(false);
Ange position för framåt-knappen (samma för andra nedan)
c.gridwidth = 1;
c.GridX = 1;
c.GridY = 1;
Add(bFront,c);
bBack = ny JButton ("bakåt-knappen:" + KeyEvent.getKeyText(backKey));
bBack.setActionCommand("backward");
bBack.addActionListener(this);
bBack.setFocusable(false);
c.GridX = 1;
c.GridY = 4;
Add(bBack,c);
bLeft = nya JButton ("vänster för:" + KeyEvent.getKeyText(leftKey));
bLeft.setActionCommand("left");
bLeft.addActionListener(this);
bLeft.setFocusable(false);
c.GridX = 0;
c.GridY = 3;
Add(bLeft,c);
Ljusa = nya JButton ("Höger knapp:" + KeyEvent.getKeyText(rightKey));
bRight.setActionCommand("right");
bRight.addActionListener(this);
bRight.setFocusable(false);
c.GridX = 3;
c.GridY = 3;
Add(bRight,c);
setFocusable(true);
addKeyListener(this);
}
Med vår klass definitionen måste vi skapa den huvudsakliga metoden som kommer att köra och Visa våra GUI:
offentliga statisk void main (String [] args) {
TODO autogenererade metod stub
Skapa och Visa GUI
javax.swing.SwingUtilities.invokeLater (nya Runnable() {
public void run() {
createAndShowGUI();
}
});
}
privata statisk void createAndShowGUI() {
Skapa och ställa in fönstret.
JFrame ram = nya JFrame ("Arduino RC bil kontroller");
frame.setLocationRelativeTo(null);
Tala om för programmet att avsluta när det grafiska Gränssnittet är stängd
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
slutliga GUI gui = nya GUI(); skapa GUI
gui.setOpaque(true); Ställ in den på synliga
frame.setContentPane(gui); koppla den till Jframe
Visa fönstret.
Frame.Pack();
frame.setVisible(true);
}
Nästa vi måste lägga till funktionalitet när vi klickar på en knapp:
Om en klickar berätta program att lyssna efter den nästa nedtryckt
public void actionPerformed (ActionEvent e) {
IF(e.getActionCommand().equals("forward")) {
listenKey = 1;
} annat if(e.getActionCommand().equals("backward")) {
listenKey = 2;
} annat if(e.getActionCommand().equals("left")) {
listenKey = 3;
} annat if(e.getActionCommand().equals("right")) {
listenKey = 4;
}
}
Vi måste också hantera tangentbord pressar:
public void keyPressed (KeyEvent e) {
När du trycker på en tangent
om inte avlyssnar en nyckel ändra färgen på motsvarande knapp
och spara tillståndet för nyckeln
om (listenKey < = 0)
IF(e.getKeyCode() == frontKey) {
bFront.setBackground(Color.yellow);
frontKeyPressed = sant;
} annat if(e.getKeyCode() == backKey) {
bBack.setBackground(Color.yellow);
backKeyPressed = sant;
} annat if(e.getKeyCode() == leftKey) {
bLeft.setBackground(Color.yellow);
leftKeyPressed = sant;
} annat if(e.getKeyCode() == rightKey) {
bRight.setBackground(Color.yellow);
rightKeyPressed = sant;
}
}
public void keyReleased (KeyEvent e) {
När en tangent släpps
Om vi väntar för en nyckel
Switch(listenKey) {
Ställa in kontrollen för knappen bokningsformuläret
fall 1:
frontKey = e.getKeyCode();
bFront.setText ("framåt-knappen:" + KeyEvent.getKeyText(frontKey));
listenKey = 0;
bryta;
fall 2:
backKey = e.getKeyCode();
bBack.setText ("bakåt-knappen:" + KeyEvent.getKeyText(backKey));
listenKey = 0;
bryta;
fall 3:
leftKey = e.getKeyCode();
bLeft.setText ("vänster för:" + KeyEvent.getKeyText(leftKey));
listenKey = 0;
bryta;
fall 4:
rightKey = e.getKeyCode();
bRight.setText ("Höger knapp:" + KeyEvent.getKeyText(rightKey));
listenKey = 0;
bryta;
Annars återgå knappen till det normala
standard:
IF(e.getKeyCode() == frontKey) {
bFront.setBackground(null);
frontKeyPressed = false;
} annat if(e.getKeyCode() == backKey) {
bBack.setBackground(null);
backKeyPressed = false;
} annat if(e.getKeyCode() == leftKey) {
bLeft.setBackground(null);
leftKeyPressed = false;
} annat if(e.getKeyCode() == rightKey) {
bRight.setBackground(null);
rightKeyPressed = false;
}
bryta;
}
}
Hämta klassfilen hittills: https://dl.dropboxusercontent.com/u/63127140/tutor...