# Oberfläche mit zwei Klassen und actionlistener verbinden



## azot (9. Jul 2015)

Guten Tag! 

Ich bin eher neu bei Java. Was ich möchte, ist diese zwei erstellten Klassen entweder "verbinden" also zusammenfügen, oder aber wissen wie ich den "rate" Wert (Klasse autoclick) innerhalb bzw. von der Klasse JFrame1 aus verändern, weitergeben kann.

Was ich auch noch nicht hinbekommen habe, ist dass das zusammenspiel zwischen Eingabe in Textfeld und betätigen des Buttons funktioniert.
Ich möchte eigentlich, dass ich den Wert ("rate") ins Textfeld eingeben kann und mit dem Button OK diesen Wert bestätigen bzw. den eingegebenen Wert dann als neuer "rate" Wert gilt.

Ich hoffe irgendwie ist es verständlich  

Wäre toll wenn mir jemand weiterhelfen könnte!

Edit: Autoclicker funktioniert als separate Klasse :]

Anbei Quellcode:


```
//Autoclick Klasse

package autoclicker;


import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class autoclick {

   public static int rate = 3000;

   public static void main(String[] args) {
      while (rate == 0) {
         try {
            System.out.println("Speed of the auto-clicker (in miliseconds):");
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            try {
               rate = Integer.parseInt(in.readLine());
               if (rate < 500) {
                  rate = 0;
                  System.out.println("Must be at least 500 miliseconds.");
               }
            } catch (NumberFormatException ex) {
               System.out.println("Error - please try again.");
            }
         } catch (IOException e) {}
      }
      try {
         Robot robot = new Robot();
         while (true) {
            try {
               Thread.sleep(rate);
               robot.mousePress(InputEvent.BUTTON1_MASK);
               robot.mouseRelease(InputEvent.BUTTON1_MASK);
            } catch (InterruptedException ex) {}
         }
      } catch (AWTException e) {}
   }

}
```


Ich bin mir ziemlich sicher bei den ActionListener fehlt noch ziemlich Code 


```
//Das Fenster mit Textfeld und Button

package autoclicker;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class JFrame1 extends JFrame {

    private JPanel contentPane;
    private JTextField txtSetSpeed;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    JFrame1 frame = new JFrame1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public JFrame1() {
        setTitle("AutoClicker");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 296, 222);
        contentPane = new JPanel();
        contentPane.setBackground(Color.white);
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
     
        txtSetSpeed = new JTextField();
        txtSetSpeed.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
             
             
         
            }

     
             
         
        });
        txtSetSpeed.setBounds(113, 77, 52, 20);
        contentPane.add(txtSetSpeed);
        txtSetSpeed.setColumns(10);
     
        JButton btnOk = new JButton("OK");
        btnOk.setBounds(97, 125, 80, 23);
        contentPane.add(btnOk);
     
        JLabel lblClickSpeed = new JLabel("Set Click speed (ms)");
        lblClickSpeed.setFont(new Font("Arial Rounded MT Bold", Font.PLAIN, 14));
        lblClickSpeed.setBounds(68, 21, 140, 46);
        contentPane.add(lblClickSpeed);
     
     
        }
    }
```


----------



## MrTroble (9. Jul 2015)

wieso try beim Frame


----------



## MrTroble (9. Jul 2015)

Ne Möglichkeit wäre über config file das mit nem FileWriter bzw File geschrieben wird und dann vom 
anderen Progarm ausgelesen wird


----------



## azot (10. Jul 2015)

MrTroble hat gesagt.:


> wieso try beim Frame


Naja ich habe das GUI mit Jigloo gemacht, der hat das kreiert, und das GUI funktioniert auch bis auf die Funktion Textfeld und Button.


----------



## azot (10. Jul 2015)

MrTroble hat gesagt.:


> Ne Möglichkeit wäre über config file das mit nem FileWriter bzw File geschrieben wird und dann vom
> anderen Progarm ausgelesen wird


Könnte man das File auch integrieren in die .jar oder in eine .exe ? Möchte eig. nur ungern zwei Files haben am Schluss


----------



## MrTroble (10. Jul 2015)

is mir nicht bekannt das das gänge


----------



## InfectedBytes (10. Jul 2015)

Warum hast du zwei main-Methoden?
Du solltest nur eine main-Methode haben, welche dann eben deinen JFrame erzeugt und außerdem einen Autoclicker-Thread erzeugt.

Die Kommunikation über eine Datei zu machen ist eine äußerst, äußerst schlechte Idee.
Du könntest deine Autoclickerklasse von ActionListener implementieren lassen und diesen dann deinem OK-Button registrieren.
Ganz grob:

```
public class Autoclicker implements Runnable, ActionListener {
  private int rate;
  private synchronized void setRate(int rate) { this.rate=rate; }
  private synchronized int getRate( { return rate; }
  public void actionPerformed (ActionEvent ae){
    setRate(...);
  }
  public void run() {
    while(...) { 
      Thread.sleep(getRate());
      // ... Clicken ...
    }
  }
}
```


```
public class MyFrame extends JFrame {
  public MyFrame(ActionListener callback) {
    // ...
    JButton okButton = new JButton("OK");
    okButton.addActionListener(callback);
    // ...
  }
}
```


```
public class Main {
  public static void main(String[] args) {
   Autoclicker ac = new Autoclicker();
   JFrame frame = new MyFrame(ac);
   // ...
   Thread thread = new Thread(ac);
    thread.start();
  }
}
```


----------



## MrTroble (10. Jul 2015)

InfectedBytes hat gesagt.:


> Warum hast du zwei main-Methoden?
> Du solltest nur eine main-Methode haben, welche dann eben deinen JFrame erzeugt und außerdem einen Autoclicker-Thread erzeugt.



ja gut das hat er ich bin hier von 2 Programm aus gegangen wenn mann es als eines sieht kann mann es im Packeg speichern


----------

