2016-01-19 18 views
0

所以我想通過構建一個簡單的計算器學習javafx,但我似乎無法使按鈕調整大小或阻止它們粘到窗口的左側。使用Javafx,試圖調整計算器的框大小

import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.control.TextField; 
import javafx.scene.control.Button; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.GridPane; 
import javafx.application.Application; 


public class CalculatorGUI extends Application{ 

public static void main(String[] args) { 
    launch(args); 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    TextField tf = new TextField(); 
    BorderPane root = new BorderPane(); 
    GridPane gp = new GridPane(); 

    root.setTop(tf); 

    ColumnConstraints cc = new ColumnConstraints(); 
    cc.setHgrow(Priority.ALWAYS); 
    cc.setFillWidth(true); 
    gp.getColumnConstraints().add(cc); 


    gp.add(new Button("7"), 0, 0); 
    gp.add(new Button("8"), 1, 0); 
    gp.add(new Button("9"), 2, 0); 
    gp.add(new Button("/"), 3, 0); 

    gp.add(new Button("4"), 0, 1); 
    gp.add(new Button("5"), 1, 1); 
    gp.add(new Button("6"), 2, 1); 
    gp.add(new Button("*"), 3, 1); 

    gp.add(new Button("1"), 0, 2); 
    gp.add(new Button("2"), 1, 2); 
    gp.add(new Button("3"), 2, 2); 
    gp.add(new Button("-"), 3, 2); 

    gp.add(new Button("0"), 0, 3); 
    gp.add(new Button("."), 1, 3); 
    gp.add(new Button("="), 2, 3); 
    gp.add(new Button("+"), 3, 3); 



    root.setCenter(gp); 

    primaryStage.setScene(new Scene(root, 300, 250)); 
    primaryStage.show(); 
} 

} 

它找出來這樣

Calculator GUI

+0

這個[例如計算器]去(https://gist.github.com/jewelsea/4344564)作爲參考可能對你有用。 – jewelsea

回答

0

您需要分別設置每個按鈕的尺寸。 我已經制作了這段代碼。 只是檢查它..

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 

public class CalculatorGUI extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     TextField tf = new TextField(); 
     BorderPane root = new BorderPane(); 
     GridPane gp = new GridPane(); 
     gp.setAlignment(Pos.CENTER); 
     gp.setHgap(10.0); 
     gp.setVgap(10.0); 
     root.setTop(tf); 

     Button button1 = new Button("1"); 
     Button button2 = new Button("2"); 
     Button button3 = new Button("3"); 
     Button button4 = new Button("4"); 
     Button button5 = new Button("5"); 
     Button button6 = new Button("6"); 
     Button button7 = new Button("7"); 
     Button button8 = new Button("8"); 
     Button button9 = new Button("9"); 
     Button button0 = new Button("0"); 
     Button buttonDOT = new Button("."); 
     Button buttonDIV = new Button("/"); 
     Button buttonMUL = new Button("*"); 
     Button buttonSUB = new Button("-"); 
     Button buttonADD = new Button("+"); 
     Button buttonEQU = new Button("="); 
     setButtonSize(button1); 
     setButtonSize(button2); 
     setButtonSize(button3); 
     setButtonSize(button4); 
     setButtonSize(button5); 
     setButtonSize(button6); 
     setButtonSize(button7); 
     setButtonSize(button8); 
     setButtonSize(button9); 
     setButtonSize(button0); 
     setButtonSize(buttonDOT); 
     setButtonSize(buttonDIV); 
     setButtonSize(buttonMUL); 
     setButtonSize(buttonSUB); 
     setButtonSize(buttonADD); 
     setButtonSize(buttonEQU); 

     gp.add(button7, 0, 0); 
     gp.add(button8, 1, 0); 
     gp.add(button9, 2, 0); 
     gp.add(buttonDIV, 3, 0); 

     gp.add(button4, 0, 1); 
     gp.add(button5, 1, 1); 
     gp.add(button6, 2, 1); 
     gp.add(buttonMUL, 3, 1); 

     gp.add(button1, 0, 2); 
     gp.add(button2, 1, 2); 
     gp.add(button3, 2, 2); 
     gp.add(buttonSUB, 3, 2); 

     gp.add(button0, 0, 3); 
     gp.add(buttonDOT, 1, 3); 
     gp.add(buttonEQU, 2, 3); 
     gp.add(buttonADD, 3, 3); 

     root.setCenter(gp); 

     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 

    public void setButtonSize(Button button){ 
     button.setPrefHeight(35.0); 
     button.setPrefWidth(35.0); 
    } 
} 
2

你應該做的第一件事情是設置可見網格線爲GridPane

gp.setGridLinesVisible(true); 

之後,你可以看到什麼你的佈局錯了。

即將回到代碼,添加單ColumnConstraintGridPane但文件說,關於它的方法getColumnConstraints

的列約束返回列表。可以添加列約束來明確控制各個列的大小和佈局行爲。如果未設置,則根據內容計算列大小和佈局行爲。指數在ObservableList表示列數,所以對於第一列的列約束是在0

位置這基本上意味着在gp.getColumnConstraints()集合的第一個元素涉及第一列中,第二到第二等上。如果您只是簡單地添加:

gp.getColumnConstraints().addAll(cc, cc, cc, cc); 

一切都會按預期工作。

提示 - 讓你的按鈕自動調整大小以網格單元,您可以使用AnchorPane

final Button button = new Button(); 
final AnchorPane anchorPane = new AnchorPane(button); 
AnchorPane.setBottomAnchor(button, 0.0); 
AnchorPane.setLeftAnchor(button, 0.0); 
AnchorPane.setRightAnchor(button, 0.0); 
AnchorPane.setTopAnchor(button, 0.0); 
gp.add(anchorPane, 0, 0); 

但很可能更好的方法來實現這一目標 - 更新見下文James_D評論。

+1

您可以使用'cc.setFillWidth(true)'將按鈕展開以填充列(不帶'AnchorPane')。或者,您可以在每個按鈕上調用'GridPane.setFillWidth(button,true);'。無論哪種情況,您還需要在每個按鈕上調用'button.setMaxWidth(Double.MAX_VALUE);'以允許它根據需要增長。類似的方法調用存在高度。 –

0

感謝您的幫助,結束了這種方法

import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.control.TextField; 
import javafx.scene.control.Button; 

import javafx.scene.layout.Priority; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.RowConstraints; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.GridPane; 
import javafx.application.Application; 


public class CalculatorGUI extends Application{ 

public static void main(String[] args) { 
    launch(args); 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    TextField tf = new TextField(); 
    BorderPane root = new BorderPane(); 
    GridPane gp = new GridPane(); 
    Button btn; 
    root.setTop(tf); 

    RowConstraints rc = new RowConstraints(); 
    rc.setVgrow(Priority.ALWAYS); 
    rc.setFillHeight(true); 
    gp.getRowConstraints().addAll(rc,rc,rc,rc); 
    ColumnConstraints cc = new ColumnConstraints(); 
    cc.setHgrow(Priority.ALWAYS); 
    cc.setFillWidth(true); 
    gp.getColumnConstraints().addAll(cc,cc,cc,cc); 


    gp.add(btn = new Button("7"), 0, 0); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("8"), 1, 0); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("9"), 2, 0); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("/"), 3, 0); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 

    gp.add(btn = new Button("4"), 0, 1); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("5"), 1, 1); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("6"), 2, 1); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("*"), 3, 1); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 

    gp.add(btn = new Button("1"), 0, 2); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("2"), 1, 2); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("3"), 2, 2); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("-"), 3, 2); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 

    gp.add(btn = new Button("0"), 0, 3); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("."), 1, 3); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("="), 2, 3); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    gp.add(btn = new Button("+"), 3, 3); 
    btn.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 


    root.setCenter(gp); 

    primaryStage.setScene(new Scene(root, 300, 250)); 
    primaryStage.show(); 
    } 

    }