簡體   English   中英

刪除JavaFX按鈕填充?

[英]Remove JavaFX button padding?

我正在構建一個非常簡單的計算器,我無法弄清楚這些按鈕周圍的填充來自哪里。 以下是我構建流程窗格的方法:

private FlowPane addFlowPaneRightSide() {

    FlowPane flow = new FlowPane();
    //flow.setPadding(new Insets(0, 0, 0, 0));
    flow.setVgap(0);
    flow.setHgap(0);
    flow.setPrefWrapLength(WIDTH_OF_CENTER / 3); // width of function buttons
    flow.setStyle("-fx-background-color: 978c87;");

    // setup arrays to hold the buttons and images for the right column
    Button operatorButtons[] = new Button[NUM_OP_BUTTONS];
    ImageView operatorImages[] = new ImageView[NUM_OP_BUTTONS];

    for (int i=0; i < NUM_OP_BUTTONS; i++) {
        operatorImages[i] = new ImageView(
                new Image(Calculator.class.getResourceAsStream(
                "images/orange-"+(i)+".png")));
        operatorButtons[i] = new Button();
        operatorButtons[i].setGraphic(operatorImages[i]);
        operatorButtons[i].setId("orange-"+(i));
        flow.getChildren().add(operatorButtons[i]);
    }

    return flow;
}

當我只是將圖像放在流程窗格中時,它運行正常,但是當我開始在循環中創建按鈕時,它給了我:

想象一下優勝美地計算器,但計算器上每個按鈕之間的像素大約為10像素。

我的CSS:

/* 
    Document   : stylesheet.css
    for Calculator project in JavaFX
*/

.root{
    -fx-font-size: 14pt;
    -fx-font-family: "Tahoma";
}

.button{
    -fx-text-fill: #006464;
    -fx-skin: "com.sun.javafx.scene.control.skin.ButtonSkin";
    /*-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;*/
    -fx-background-color: transparent;
    -fx-background-insets: 0 0 0 0, 0, 0, 0;
    -fx-background-radius: 0 0 0 0, 0, 0, 0;
    -fx-border-width: 0 0 0 0, 0, 0, 0;
}

.button:focused {
    -fx-color: -fx-focused-base;
    /*-fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color;*/
    -fx-background-color: transparent;
    -fx-background-insets: 0 0 0 0, 0, 0, 0;
    -fx-background-radius: 0 0 0 0, 0, 0, 0;
    -fx-border-width: 0 0 0 0, 0, 0, 0;
}

最后是整個計划:

package calculator;


import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text; 

/**
 *
 * @author Jim Lohse
 */
public class Calculator extends Application {

    public final int CALC_WIDTH = 500;
    public final int CALC_HEIGHT = 642;
    public final int NUM_BUTTONS = 15;
    public final int NUM_OP_BUTTONS = 5;
    public final int WIDTH_OF_CENTER = 354;

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

        @Override
    public void start(Stage stage) {

// Use a border pane as the root for scene
        BorderPane border = new BorderPane();

        HBox hbox = addHBox();
        border.setTop(hbox);

        border.setRight(addFlowPaneRightSide());

        border.setCenter(addFlowPaneCenter());

        Scene scene = new Scene(border, CALC_WIDTH, CALC_HEIGHT);
        scene.getStylesheets().add("calculator/stylesheet.css");
        stage.setScene(scene);
        stage.setTitle("Calculator");
        stage.setResizable(false);
        stage.show();
    }

/*
 * Creates an HBox with two buttons for the top region
 */

    private HBox addHBox() {

        HBox hbox = new HBox();
        hbox.setPadding(new Insets(15, 12, 15, 12));
        hbox.setSpacing(10);   // Gap between nodes
        hbox.setStyle("-fx-background-color: #336699;");

        Button buttonCurrent = new Button("Current");
        buttonCurrent.setPrefSize(100, 20);

        Button buttonProjected = new Button("Projected");
        buttonProjected.setPrefSize(100, 20);

        hbox.getChildren().addAll(buttonCurrent, buttonProjected);

        return hbox;
    }

/*
 * Creates a horizontal flow pane with the orange operations buttons
 */
    private FlowPane addFlowPaneRightSide() {

        FlowPane flow = new FlowPane();
        //flow.setPadding(new Insets(0, 0, 0, 0));
        flow.setVgap(0);
        flow.setHgap(0);
        flow.setPrefWrapLength(WIDTH_OF_CENTER / 3); // width of function buttons

        // setup arrays to hold the buttons and images for the right column
        Button operatorButtons[] = new Button[NUM_OP_BUTTONS];
        ImageView operatorImages[] = new ImageView[NUM_OP_BUTTONS];

        for (int i=0; i < NUM_OP_BUTTONS; i++) {
            operatorImages[i] = new ImageView(
                    new Image(Calculator.class.getResourceAsStream(
                    "images/orange-"+(i)+".png")));
            operatorButtons[i] = new Button();
            operatorButtons[i].setGraphic(operatorImages[i]);
            operatorButtons[i].setId("orange-"+(i));
            flow.getChildren().add(operatorButtons[i]);
        }

        return flow;
    }

    /*
 * Creates a horizontal flow pane with the orange operations buttons
 */
    private FlowPane addFlowPaneCenter() {

        FlowPane flow = new FlowPane();
        //flow.setPadding(new Insets(0, 0, 0, 0));
        flow.setVgap(0);
        flow.setHgap(0);
        flow.setPrefWrapLength(WIDTH_OF_CENTER); // width of function buttons

        Button centerButtons[] = new Button[NUM_BUTTONS];
        ImageView centerImages[] = new ImageView[NUM_BUTTONS];
        for (int i=0; i < NUM_BUTTONS; i++) {
            centerImages[i] = new ImageView(
                    new Image(Calculator.class.getResourceAsStream(
                    "images/button-"+(i)+".png")));
            centerButtons[i] = new Button();
            centerButtons[i].setGraphic(centerImages[i]);
            centerButtons[i].setId("button-"+(i));
            flow.getChildren().add(centerButtons[i]);
        }

        return flow;
    }
}

我沒有你正在使用的圖像的副本,所以我看不出它應該是什么樣子。 但我會試着拍一張正方形的照片。

這讓我:

這里

現在,按照我所描述的內容,按鈕之間沒有實際的填充。 我想你可能會說的是標簽區域本身有一些填充物會導致問題。 這很容易解決。

固定版本

我如何解決這個問題是通過在制作它們時為每個按鈕添加一行代碼( blah [i] .setPadding(Insets.EMPTY) )。

for (int i=0; i < NUM_OP_BUTTONS; i++) {
    operatorImages[i] = new ImageView(
            new Image(Java.class.getResourceAsStream(
                    "art" + File.separator + "Square.png")));
    operatorButtons[i] = new Button();
    operatorButtons[i].setGraphic(operatorImages[i]);
    operatorButtons[i].setPadding(Insets.EMPTY);
    operatorButtons[i].setId("orange-"+(i));
    flow.getChildren().add(operatorButtons[i]);
}

for (int i=0; i < NUM_BUTTONS; i++) {
    centerImages[i] = new ImageView(
            new Image(Java.class.getResourceAsStream(
                    "art" + File.separator + "Square.png")));
    centerButtons[i] = new Button();
    centerButtons[i].setGraphic(centerImages[i]);
    centerButtons[i].setPadding(Insets.EMPTY);
    centerButtons[i].setId("button-"+(i));
    flow.getChildren().add(centerButtons[i]);
}

這應該可以解決你的小問題。

編輯:只是想提一下,你看到的一點點空白是圖像本身的一部分,而不是填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM