Oberfläche mit zwei Klassen und actionlistener verbinden

azot

Mitglied
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:

Java:
//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 🙁

Java:
//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);
     
     
        }
    }
 
Zuletzt bearbeitet:
Ne Möglichkeit wäre über config file das mit nem FileWriter bzw File geschrieben wird und dann vom
anderen Progarm ausgelesen wird
 
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:
Java:
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 ...
    }
  }
}
Java:
public class MyFrame extends JFrame {
  public MyFrame(ActionListener callback) {
    // ...
    JButton okButton = new JButton("OK");
    okButton.addActionListener(callback);
    // ...
  }
}
Java:
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();
  }
}
 

Zurück
Oben