class SteuerPanel extends JPanel implements ActionListener, Runnable
{
private JButton start = new JButton("Start");
private JTextField kraftEingabe = new JTextField("50");
private JLabel kraft = new JLabel("Kraft:");
private JTextField winkelEingabe = new JTextField("45");
private JLabel winkel = new JLabel("Winkel:");
private int eingegebeneKraft = 50;
private int eingegebenerWinkel = 45;
private VersuchePanel versuchsPanel;
private KatapultPanel katapultArea;
private boolean fehler = false;
SteuerPanel(VersuchePanel versuchsPanel, KatapultPanel katapultArea)
{
this.versuchsPanel = versuchsPanel;
this.katapultArea = katapultArea;
setLayout(new GridLayout(1, 5));
add(kraft);
add(kraftEingabe);
add(winkel);
add(winkelEingabe);
add(start);
kraftEingabe.addActionListener(this);
kraftEingabe.setActionCommand("Newton");
kraftEingabe.selectAll();
winkelEingabe.addActionListener(this);
winkelEingabe.setActionCommand("Grad");
winkelEingabe.selectAll();
start.addActionListener(this);
start.setActionCommand("StartButton");
}
public void run()
{
for(int x = 1; x <= 825; x++)
{
try
{
Thread.sleep(5);
}
catch(InterruptedException ie) {}
katapultArea.setX();
katapultArea.repaint();
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("StartButton"))
{
if(!fehler)
{
start.setEnabled(false);
kraftEingabe.setEditable(false);
winkelEingabe.setEditable(false);
versuchsPanel.set(versuchsPanel.get() - 1);
new Thread(this).start();
}
else
{
kraftEingabe.setText("Korrigiere die Eingabe du Troll!");
winkelEingabe.setText("Korrigiere die Eingabe du Troll!");
}
}
else
{
String benutzerEingabe = ((JTextField)e.getSource()).getText();
try
{
if(e.getActionCommand().equals("Newton"))
eingegebeneKraft = Integer.parseInt(benutzerEingabe);
else if(e.getActionCommand().equals("Grad"))
eingegebenerWinkel = Integer.parseInt(benutzerEingabe);
if(!kraftEingabe.getText().equals("korrigiere die Eingabe du Troll!") && !winkelEingabe.getText().equals("korrigiere die Eingabe du Troll!"))
fehler = false;
}
catch(NumberFormatException n)
{
if(e.getActionCommand().equals("Newton"))
kraftEingabe.setText("Fehler - Bitte Erneute Eingabe!");
else winkelEingabe.setText("Fehler - Bitte Erneute Eingabe!");
fehler = true;
}
}
}
}
if(e.getActionCommand().equals("StartButton"))
{
if(!fehler)
{
start.setEnabled(false);
kraftEingabe.setEditable(false);
winkelEingabe.setEditable(false);
versuchsPanel.set(versuchsPanel.get() - 1);
new Thread(this).start();
}
else
{
kraftEingabe.setText("Korrigiere die Eingabe du Troll!");
winkelEingabe.setText("Korrigiere die Eingabe du Troll!");
}
Indem du das verändern der beiden int's immer machst wenn actionPerformed aufgerufen wird. Dahinter prüfst du dann ob der JButton gedrückt wurde und machst gegebenfalls dem sein Zeug.
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class XXX{ // kein direktes Implementieren der benötigten Listener bzw. Runnable! Oder I S T dein SteuerPanel ein ActionListener? Nein. Außerdem kannn man so mehrere ActionListeners haben....
public static void main(String[] args){
new XXX();}
private JFrame window = new JFrame();
private JPanel panel = new JPanel();
private String input1;
private String input2;
private JTextField input1Field;
private JTextField input2Field;
private JButton startButton;
public XXX(){
window.setBounds(100,100,300,250);
window.add(panel);
panel.setLayout(new GridLayout(3,1));
panel.add(input1Field = new JTextField());
panel.add(input2Field = new JTextField());
panel.add(startButton = new JButton("start"));
// Die GUI-Elemente bekommen VERSCHIEDENE ActionListener zugeweisen. Dadurch braucht man innerhalb der Listener nicht überprüfen wer das Event ausgelöst hat
input1Field.addActionListener(inputFieldListener);
input2Field.addActionListener(inputFieldListener);
startButton.addActionListener(buttonListener);
SwingUtilities.invokeLater(new Runnable() { // Die GUI sollte immer im Event Dispatcher Thread gestartet werden. Das geschieht über SwingUtilities.invokeLater
public void run() {
window.setVisible(true);
}
});
}
private ActionListener inputFieldListener = new ActionListener(){
public void actionPerformed(ActionEvent event){
inheritInput();
}
};
private ActionListener buttonListener = new ActionListener(){
public void actionPerformed(ActionEvent event){
inheritInput();
// macht irgendwas tolles, z.b. en Thread starten
new Thread(new Runnable(){
public void run(){
// kann hier auf input1 und input2 zugreifen
}
}).start();
}
};
private void inheritInput(){
input1 = input1Field.getText();
input2 = input2Field.getText();
// Debug-Ausgaben
System.out.println("input1 ist jetzt: "+input1);
System.out.println("input2 ist jetzt: "+input2);
}
}