2017-10-21 2 views
0

Ich versuche, eine Löschtaste zu erstellen, die etwa wie folgt aussieht: enter image description hereButton: minimale Größe

Für das Kreuz, das ich zur Zeit bin mit dem Buchstaben ‚x‘.

Jetzt versuche ich, den leeren Raum in der Schaltfläche zu reduzieren, aber ich finde keine Möglichkeit, den vertikalen Raum loszuwerden.

Zur Zeit habe ich so etwas wie dieses:

package test; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.Region; 
import javafx.stage.Stage; 

public class CancelButtonTestApplication extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     GridPane gridPane = new GridPane(); 

     Label someLabel = new Label("Some Label:"); 
     Button cancelButton = new Button("x"); 
     cancelButton.setStyle("-fx-padding: 0.083333em 0.083333em 0.083333em 0.083333em;"); /* 1 1 1 1 */ 
     cancelButton.setMaxHeight(Region.USE_PREF_SIZE); 
     someLabel.setLabelFor(cancelButton); 
     gridPane.add(someLabel, 0, 0); 
     gridPane.add(cancelButton, 1, 0); 
     gridPane.setHgap(5.0d); 
     GridPane.setVgrow(cancelButton, Priority.NEVER); 
     GridPane.setHgrow(cancelButton, Priority.NEVER); 

     Scene scene = new Scene(gridPane, 200, 50); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Es sieht wie folgt aus:

enter image description here

Antwort

0

nicht sicher, warum sind Sie nicht Einschübe mit?

Ich tat cancelButton.setPadding(new Insets(-5,0,-2,0)); und dann konnte ich den oberen/unteren Raum entfernen (das ist für Captial X verfügbar). Mit Kapital X meinte ich, dass Sie, wenn Sie X anstelle von x verwenden, kein spezielles Padding benötigen, sondern nur Insets.EMPTY.

oder es dynamisch halten Sie auch FontMetrics

FontMetrics metrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(cancelButton.getFont()); 
cancelButton.setPadding(new Insets(-metrics.getDescent()*1.8, 0, -metrics.getDescent(), 0)); 

dieser Code wird bekam nach scene.show() versuchen können, die richtige Matrix zu erhalten. enter image description here

Voll Code:

package test; 

import com.sun.javafx.tk.FontMetrics; 
import com.sun.javafx.tk.Toolkit; 
import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.Region; 
import javafx.stage.Stage; 

public class CloseButtonTestApplication extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     GridPane gridPane = new GridPane(); 

     Label someLabel = new Label("Some Label:"); 


     Button cancelButton = new Button("x"); 

     //cancelButton.setStyle("-fx-padding: 0.083333em 0.083333em 0.083333em 0.083333em;"); /* 1 1 1 1 */ 
     cancelButton.setMaxHeight(Region.USE_PREF_SIZE); 
     //cancelButton.setPadding(new Insets(0,0,0,0)); 
     someLabel.setLabelFor(cancelButton); 

     Button cancelButton2 = new Button("X"); 

     //cancelButton.setStyle("-fx-padding: 0.083333em 0.083333em 0.083333em 0.083333em;"); /* 1 1 1 1 */ 
     cancelButton2.setMaxHeight(Region.USE_PREF_SIZE); 
     cancelButton2.setPadding(new Insets(0,0,0,0)); 
     someLabel.setLabelFor(cancelButton); 
     gridPane.add(someLabel, 0, 0); 
     gridPane.add(cancelButton, 1, 0); 
     gridPane.add(cancelButton2, 2, 0); 

     gridPane.setHgap(5.0d); 
     GridPane.setVgrow(cancelButton, Priority.NEVER); 
     GridPane.setHgrow(cancelButton, Priority.NEVER); 

     Scene scene = new Scene(gridPane, 200, 50); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     FontMetrics metrics = Toolkit.getToolkit().getFontLoader().getFontMetrics(cancelButton.getFont()); 
     cancelButton.setPadding(new Insets(-metrics.getDescent()*1.8, 0, -metrics.getDescent(), 0)); 



    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

der Stil Ich setzt die Polsterung 1 mit, 1, 1, 1 AFAIK Sie sagen, dass die empfohlene Lösung negative Werte für padding zu verwenden ist? Warum ist das nötig? – Puce

+0

Das Padding zu leeren sieht nicht richtig aus, weder mit kleinem X noch mit Großbuchstaben X. – Puce

+0

Ich kann das Bild teilen, das funktioniert gut für mich. Ich habe das Bild mit meinen Änderungen hochgeladen. – Optional

Verwandte Themen