JavaFX Langes drücken eines Buttons

iliano

Mitglied
Hallo liebe Leute.

Ich habe ein kleines Problem was ich nicht lösen kann.
Suche schon seit Tagen vergeblich nach einer Lösung, aber ich werde leider nicht fündig.

Ich habe ein Button und wenn ich ein Mal drauf drücke soll ein anderes Fenster geöffnet werden. Das ist auch kein Problem.
Ich möchte aber noch bei den gleichen Button, wenn ich ihn lange gedrückt halte, ein anderes Fenster geöffnet werden, wo der User den Button Text ändern kann von einen TextFeld aus.

Diese Funktion für ein langes drücken eines Button finde ich nicht.

Habe schon mit OnMouseClicked, OnMousePressed probiert, aber alles leider ohne Erfolg.
Mit dem Doppelklick des Buttons habe ich auch probiert, aber das ist nicht praktisch denn mit dem Doppelklick öffnen sich beide Fenster.

Ich wäre sehr Dankbar über Ideen und Hilfe von euch.
 

tommysenf

Top Contributor
Wie wäre es mit folgendem simplen Ansatz:

Bei OnMousePressed merkst du dir die aktuelle Zeit
Bei OnMouseReleased bildest du die Differenz von der aktuellen Zeit zu der gemerkten und entscheidest so ob der Button lange genug gedrückt wurde.
 

iliano

Mitglied
Sehr gute Ansatz muss ich sagen!

Nur leider habe ich es so nicht hinbekommen mit der Programmierung. So habe ich ein neues Fenster erstellt, mit TextFields. Von diesen Textfield wird dann der Button Text gesetzt und ausgelesen.

Vielen lieben Dank.
 

knilch

Bekanntes Mitglied
Nur leider habe ich es so nicht hinbekommen mit der Programmierung. So habe ich ein neues Fenster erstellt, mit TextFields. Von diesen Textfield wird dann der Button Text gesetzt und ausgelesen.
Wäre noch gut zu wissen wie du es machen wolltest...
Hier mal eine mögliche Variante:
App.java:
Java:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class App extends Application  {
  
    public static void main(String[] args) {
        launch();
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        try {
            final FXMLLoader loader = new FXMLLoader(getClass().getResource("MainGui.fxml"));
            final Parent root = (Parent) loader.load();
            primaryStage.setTitle("Hauptfenster");
            Scene scene = new Scene(root, 740.0, 430.0);
            primaryStage.setScene(scene);
            primaryStage.setResizable(false);
            primaryStage.show();

        } catch(Exception e) {
            System.err.println(e.getMessage());
        }      
    }
}
MainGui.fxml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>

<GridPane fx:id="gridPane" prefHeight="366.0" prefWidth="341.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="MainGuiController">
   <rowConstraints>
      <RowConstraints minHeight="10.0" prefHeight="30.0" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" />
      <RowConstraints minHeight="10.0" prefHeight="30.0" />
   </rowConstraints>
   <columnConstraints>
      <ColumnConstraints />
      <ColumnConstraints />
   </columnConstraints>
   <children>
      <Label text="Ich bin das Hauptfenster..." />
      <Button fx:id="openWindowButton" text="Fenster öffnen" GridPane.rowIndex="2" />
      <Button fx:id="exitButton" text="Schliessen" onAction="#handleExitButtonEvent" GridPane.columnIndex="1" GridPane.rowIndex="2" />
   </children>
</GridPane>
Window1.fxml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="307.0" prefWidth="298.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Window1Controller">
   <children>
      <Label text="Ich bin das 1.Fenster... hier gibts nix zu tun..." />
      <Button fx:id="exitButton" text="Schliessen" onAction="#handleExitButtonEvent"/>
   </children>
</VBox>
Window2.fxml:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>
<VBox prefHeight="320.0" prefWidth="287.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="Window2Controller">
   <children>
         <Label text="Name vom Button: "/>
      <TextField fx:id="textField" />
      <Button fx:id="exitButton" text="Schliessen" onAction="#handleExitButtonEvent"/>
   </children>
</VBox>
MainGuiController.java
Java:
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class MainGuiController implements Initializable {
   @FXML
   private Button exitButton;
   @FXML
   private Button openWindowButton;
  
   @FXML
   private GridPane gridPane;
  
   private static long DIFFERENCE = 1000;   // [ms] Dieser Wert entscheidet, ob Window 1 oder Window 2 geöffnent wird
  
   private long mousePressed = 0;
   private long mouseReleased = 0;

   @Override
   public void initialize(URL location, ResourceBundle resources) {
     openWindowButton.onMousePressedProperty().set(new EventHandler<MouseEvent>() {
       @Override
       public void handle(MouseEvent arg0) {
         mousePressed = System.currentTimeMillis();
       }
     });
    
     openWindowButton.onMouseReleasedProperty().set(new EventHandler<MouseEvent>() {
       @Override
       public void handle(MouseEvent arg0) {
         mouseReleased = System.currentTimeMillis();
         if((mouseReleased - mousePressed) < DIFFERENCE)
           openWindow1();
         else
           openWindow2();
       }
     });
   }
    
   /**
    * Method to close the mainwindow
    */
   @FXML
   protected void handleExitButtonEvent(ActionEvent event) {
     Stage stage = (Stage) exitButton.getScene().getWindow();
     stage.close();
    
   }
  
   /**
    * Method to open window 1 as dialog
    */
   private void openWindow1() {
     FXMLLoader loader = new FXMLLoader(MainGuiController.class.getResource("Window1.fxml"));
     Stage dialogStage = new Stage();
     Parent root;
     try {
       root = (Parent) loader.load();
       // falls im Window1 ein Property binding von einem Controll vom MainGuiController gemacht werden muss..
       //Window1Controller window1Controller = (Window1Controller)loader.getController();
       Scene scene = new Scene(root);
       dialogStage.setResizable(false);
       dialogStage.setScene(scene);
       dialogStage.setTitle("Window 1");
       dialogStage.initModality(Modality.APPLICATION_MODAL);  
       dialogStage.show();
       dialogStage.setResizable(false);      
     } catch (IOException e) {
       System.out.println(e.getMessage());
     }
   }
  
   /**
    * Method to open window 2 as dialog
    */
   private void openWindow2() {
     FXMLLoader loader = new FXMLLoader(MainGuiController.class.getResource("Window2.fxml"));
     Stage dialogStage = new Stage();
     Parent root;
     try {
       root = (Parent) loader.load();
       Window2Controller window2Controller = (Window2Controller)loader.getController();
       Scene scene = new Scene(root);
       dialogStage.setResizable(false);
       dialogStage.setScene(scene);
       dialogStage.setTitle("Window 2");
       dialogStage.initModality(Modality.APPLICATION_MODAL);  
       dialogStage.show();
       dialogStage.setResizable(false);
window2Controller.getButtonNameProperty().bindBidirectional(openWindowButton.textProperty());
      
     } catch (IOException e) {
       System.out.println(e.getMessage());
     }
   }
}
Window1Controller.java:
Java:
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.stage.Stage;

public class Window1Controller implements Initializable {
    @FXML
    private Button exitButton;
  
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        // TODO Auto-generated method stub
      
    }
  
    /**
     * Method to close this window
     * @param event
     */
    @FXML
    protected void handleExitButtonEvent(ActionEvent event) {
        Stage stage = (Stage) exitButton.getScene().getWindow();
        stage.close();
    }  
}
Window2Controller.java:
Java:
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.stage.Stage;

public class Window2Controller implements Initializable {
    @FXML
    private Button exitButton;
    @FXML
    private TextField textField;
  
    private StringProperty buttonNameProperty = new SimpleStringProperty();
  
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        textField.textProperty().bindBidirectional(buttonNameProperty);
    }

    /**
     * Method to close this window
     * @param event
     */
    @FXML
    protected void handleExitButtonEvent(ActionEvent event) {
        Stage stage = (Stage) exitButton.getScene().getWindow();
        stage.close();
      
    }

    /**
     * @return the buttonName
     */
    public StringProperty getButtonNameProperty() {
        return buttonNameProperty;
    }

    /**
     * @param buttonName the buttonName to set
     */
    public void setButtonNameProperty(StringProperty value) {
        buttonNameProperty = value;
    }
}
Entscheidend dabei ist, dass auf den Button selbst kein onAction-Evenet ausgelöst wird, sondern auf onMousePressedProperty() und openWindowButton.onMouseReleasedProperty() ein Event ausgelöst wird...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
B Event Handling jButton gedrückt halten als mehrmaliges Drücken interpretieren AWT, Swing, JavaFX & SWT 4
E JToggleButton automatisch nach drücken loslassen AWT, Swing, JavaFX & SWT 3
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
G Fenster minimieren bei [win]+[d] drücken unterbinden! AWT, Swing, JavaFX & SWT 10
R Swing ActionListener für JButton bei Drücken AWT, Swing, JavaFX & SWT 3
D Swing Button lässt sich nicht drücken AWT, Swing, JavaFX & SWT 5
M Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt AWT, Swing, JavaFX & SWT 5
N Durch Button drücken neues Fenster öffnen AWT, Swing, JavaFX & SWT 13
G JToggleButton - Hintergrundfarbe beim Drücken festlegen AWT, Swing, JavaFX & SWT 4
T JList Mehrfachauswahl ohne Drücken der Strg-Taste AWT, Swing, JavaFX & SWT 3
D JButton mit Enter drücken AWT, Swing, JavaFX & SWT 5
R CheckBox drücken, sodass eine Aktion ausgeführt wird AWT, Swing, JavaFX & SWT 5
P JDialog fenster friert ein beim drücken von button AWT, Swing, JavaFX & SWT 4
S Button drücken und dann weiter? AWT, Swing, JavaFX & SWT 12
S Ein Bild beim drücken eines Button zuweisen AWT, Swing, JavaFX & SWT 16
lin Frame bei Drücken eines Buttons mit Maus verschieben AWT, Swing, JavaFX & SWT 7
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
I Erstellung eines kleinen Programmes AWT, Swing, JavaFX & SWT 8
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
J Logikfehler im erstellen eines GUI AWT, Swing, JavaFX & SWT 3
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben