2015-05-25 22 views
0

嘿,我是一個在java的begginer,我只在短時間內這樣做,反正我最後的項目在java基礎知識,我需要做一個簡單的計算器與gui ,我認爲這不會那麼難,但我有點不對勁:我已經設法做到最多(我認爲),但我堅持atm與操作的事件處理和設置值來計算,這裏是我的代碼並且請你給我的建議或提示如何做到這一點:dJavaFX begginer的簡單的計算器事件處理

import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.application.Application; 
import javafx.beans.binding.Bindings; 
import javafx.beans.property.DoubleProperty; 
import javafx.beans.property.SimpleDoubleProperty; 
import javafx.beans.value.WritableObjectValue; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.FlowPane; 
import javafx.stage.Stage; 



public class Calculator extends Application { 

    private DoubleProperty value = new SimpleDoubleProperty(); 

    @Override 
    public void start(Stage primaryStage) { 

     FlowPane pane = new FlowPane(); 
     pane.setAlignment(Pos.CENTER); 
     pane.setPadding(new Insets (30 , 20 , 30 , 20)); 
     pane.setHgap(5); 
     pane.setVgap(5); 
     pane.setMinWidth(400); 
     pane.setPrefWidth(400); 
     pane.setMaxWidth(400); 

     TextField Rezultat = new TextField(); 
     Rezultat.setEditable(false); 
     Rezultat.setAlignment(Pos.CENTER); 
     Rezultat.setMinSize(336, 40); 
     Rezultat.textProperty().bind(Bindings.format("%.0f" , value)); 
     pane.getChildren().add(Rezultat); 

     Button sedmica = new Button("7");   
     Button osmica = new Button("8"); 
     Button devetka = new Button("9"); 
     Button plus = new Button("+"); 

      sedmica.setMinSize(80, 80); 
      osmica.setMinSize(80, 80); 
      devetka.setMinSize(80, 80); 
      plus.setMinSize(80, 80); 

    pane.getChildren().add(sedmica); 
     sedmicaHandler handler7 = new sedmicaHandler(); 
     sedmica.setOnAction(handler7); 
    pane.getChildren().add(osmica); 
     osmicaHandler handler8 = new osmicaHandler(); 
     osmica.setOnAction(handler8); 
    pane.getChildren().add(devetka); 
     devetkaHandler handler9 = new devetkaHandler(); 
     devetka.setOnAction(handler9); 
    pane.getChildren().add(plus); 
     plusHandler handlerplus = new plusHandler(); 
     plus.setOnAction(handlerplus); 

     Button cetvorka = new Button("4"); 
     Button petica = new Button("5"); 
     Button sestica = new Button("6"); 
     Button minus = new Button("-"); 

      cetvorka.setMinSize(80, 80); 
      petica.setMinSize(80, 80); 
      sestica.setMinSize(80, 80); 
      minus.setMinSize(80, 80); 

    pane.getChildren().add(cetvorka); 
     cetvorkaHandler handler4 = new cetvorkaHandler(); 
     cetvorka.setOnAction(handler4); 
    pane.getChildren().add(petica); 
     peticaHandler handler5 = new peticaHandler(); 
     petica.setOnAction(handler5); 
    pane.getChildren().add(sestica); 
     sesticaHandler handler6 = new sesticaHandler(); 
     sestica.setOnAction(handler6); 
    pane.getChildren().add(minus); 
     minusHandler handlerminus = new minusHandler(); 
     minus.setOnAction(handlerminus); 

     Button trica = new Button("3"); 
     Button dvica = new Button("2"); 
     Button jedinica = new Button("1"); 
     Button puta = new Button("*"); 

      trica.setMinSize(80, 80); 
      dvica.setMinSize(80, 80); 
      jedinica.setMinSize(80, 80); 
      puta.setMinSize(80, 80); 

    pane.getChildren().add(jedinica); 
     jedinicaHandler handler1 = new jedinicaHandler(); 
     jedinica.setOnAction(handler1); 
    pane.getChildren().add(dvica); 
     dvicaHandler handler2 = new dvicaHandler(); 
     dvica.setOnAction(handler2); 
    pane.getChildren().add(trica); 
     tricaHandler handler3 = new tricaHandler(); 
     trica.setOnAction(handler3); 
    pane.getChildren().add(puta); 
     putaHandler handlerputa = new putaHandler(); 
     puta.setOnAction(handlerputa); 

     Button nula = new Button("0"); 
     Button jednako = new Button("="); 
     Button podijeljeno = new Button("/"); 
     Button EE = new Button ("EE"); 

      nula.setMinSize(80, 80); 
      jednako.setMinSize(80, 80); 
      podijeljeno.setMinSize(80, 80); 
      EE.setMinSize(80, 80); 

    pane.getChildren().add(EE); 
     EEHandler handlerEE = new EEHandler(); 
     EE.setOnAction(handlerEE); 
    pane.getChildren().add(nula); 
     nulaHandler handler0 = new nulaHandler(); 
     nula.setOnAction(handler0); 
    pane.getChildren().add(jednako); 
     jednakoHandler handlerjednako = new jednakoHandler(); 
     jednako.setOnAction(handlerjednako); 
    pane.getChildren().add(podijeljeno); 
     podijeljenoHandler handlerpodijeljeno = new podijeljenoHandler(); 
     podijeljeno.setOnAction(handlerpodijeljeno); 



    Scene scene = new Scene(pane); 
    primaryStage.setTitle("Calculator"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

    } 

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

    } 

} 

class nulaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     value.set(0); 
    } 
} 
class jedinicaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("1"); 
    } 
}   
class dvicaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("2"); 
    } 
} 
class tricaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("3"); 
    } 
}   
class cetvorkaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("4"); 
    } 
} 
class peticaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("5"); 
    } 
}     
class sesticaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("6"); 
    } 
}      
class sedmicaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("7"); 
    } 
}       
class osmicaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("8"); 
    } 
}        
class devetkaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("9"); 
    } 
}         
class plusHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("+"); 
    } 
}          
class minusHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("-"); 
    } 
}           
class putaHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("*"); 
    } 
} 
class podijeljenoHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("/"); 
    } 
}             
class jednakoHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("="); 
    } 
}              
class EEHandler implements EventHandler<ActionEvent>{ 
     @Override 
    public void handle(ActionEvent e){ 
     System.out.println("EE"); 
    } 
} 

我的處理程序是隻是基本的,他們打印數量到控制檯,所以你可以無視他們,我看到了一些例子與價值.set命令應該與他們一起去嗎?請幫助截止日期爲2周。非常感謝

+0

'JavaScript的!== java'。你確定* javascript *標籤嗎? – RobG

+0

首先,你的功課是你自己做的。你已經實現了事件,這是很容易的部分。然而核心是功能,這就是你必須自己做的事情。另一方面,只需使用谷歌。有大量的計算器可以從中學習。不,作爲初學者,只是使用一些基本元素(雙)而不是屬性來存儲你的值。 – Roland

+0

事情是我必須堅持我的講座,這是關於我所做的和我在javafx中找到的所有其他計算器都是在我們沒有在課堂上完成的方式完成的,教授不會接受它,我只是要求一些關於如何實現功能的指針,相信我我GOOGLE了很多:D –

回答

0

我不會爲你做的功課,但只是一些使用技巧:

  • 可變名應該以小寫字母(文本字段rezultat,不Rezultat)

啓動想想你按下按鈕時會發生什麼:

  • 如果你按5' - ''+'55,你的計算器應該做什麼,應該從5減去還是加上55)
  • 要計算多個操作嗎? (5 + 5 + 5 + 5/5)
  • 十進制數字呢? (你可以不填他們,在當前的設計)

而且你每一個按鈕做幾乎同樣的事情。(或10個按鈕至少你有相同的邏輯) 你可以創建你的應用程序一個循環:

public class Calculator extends Application { 

private TextField textField = new TextField(); 

@Override 
public void start(Stage primaryStage) { 

    List<String> buttons = Arrays.asList("7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", "=", "/", "EE"); 

    FlowPane pane = new FlowPane(); 
    pane.setAlignment(Pos.CENTER); 
    pane.setPadding(new Insets(30, 20, 30, 20)); 
    pane.setHgap(5); 
    pane.setVgap(5); 
    pane.setMinWidth(400); 
    pane.setPrefWidth(400); 
    pane.setMaxWidth(400); 

    textField.setEditable(false); 
    textField.setAlignment(Pos.CENTER); 
    textField.setMinSize(336, 40); 
    // Rezultat.textProperty().bind(Bindings.format("%.0f", value)); 
    pane.getChildren().add(textField); 

    for (String button : buttons) { 
     Button b = new Button(button); 
     b.setMinSize(80, 80); 
     pane.getChildren().add(b); 
     b.setOnAction((e) -> doSomething(b.getText())); 
    } 

    Scene scene = new Scene(pane); 
    primaryStage.setTitle("Calculator"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

} 

private void doSomething(String text) { 

    if (text.equalsIgnoreCase("=")) { 
     // Calc 
    } 

    else if (text.equalsIgnoreCase("EE")) { 
     // EE 
    } else if (text.equalsIgnoreCase("+") || text.equalsIgnoreCase("-") || text.equalsIgnoreCase("*") || text.equalsIgnoreCase("/")) { 
     // + - */
    } 
    // .... 
    else { 
     // numeric 
     textField.appendText(text); 
    } 
} 

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

} 

} 
+0

非常感謝這很大幫助 –

-1

公共類視圖擴展應用{

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

public void start(Stage primaryStage){ 
    primaryStage.setTitle("Calculator"); 

    GridPane root = new GridPane(); 

    Label textBox1 = new Label("Text1"); 
    root.add(textBox1, 0, 0, 5, 1); 
    Label textBox2 = new Label("Text2"); 
    root.add(textBox2, 0, 1, 5, 1); 
    textBox1.setId("lblTextBox1"); 
    textBox2.setId("lblTextBox2"); 

    Button btn0 = new Button("0"); 
    Button btn1 = new Button("1"); 
    Button btn2 = new Button("2"); 
    Button btn3 = new Button("3"); 
    Button btn4 = new Button("4"); 
    Button btn5 = new Button("5"); 
    Button btn6 = new Button("6"); 
    Button btn7 = new Button("7"); 
    Button btn8 = new Button("8"); 
    Button btn9 = new Button("9"); 
    btn0.setId("btn0"); 
    btn1.setId("btn1"); 
    btn2.setId("btn2"); 
    btn3.setId("btn3"); 
    btn4.setId("btn4"); 
    btn5.setId("btn5"); 
    btn6.setId("btn6"); 
    btn7.setId("btn7"); 
    btn8.setId("btn8"); 
    btn9.setId("btn9"); 


    Button btnDot = new Button("."); 
    Button btnPlus = new Button("+"); 
    Button btnMinus = new Button("-"); 
    Button btnTimes = new Button("*"); 
    Button btnDivide = new Button("/"); 
    Button btnEquals = new Button("="); 
    Button btnMC = new Button("MC"); 
    Button btnMR = new Button("MR"); 
    Button btnMS = new Button("MS"); 
    Button btnMPlus = new Button("M+"); 
    Button btnMMinus = new Button("M-"); 
    Button btnBack = new Button("<="); 
    Button btnCE = new Button("CE"); 
    Button btnC = new Button("C"); 
    Button btnPlusOrMinus = new Button("+/-"); 
    Button btnSqrt = new Button("sqrt"); 
    Button btnPercentage= new Button("%"); 
    Button btn1OverX = new Button("1/x"); 
    btnPlus.setId("btnPlus"); 
    btnTimes.setId("btnTimes"); 
    btnDot.setId("btnDot"); 
    btnEquals.setId("btnEquals"); 
    btnC.setId("btnClear"); 

    btn0.setMaxHeight(Double.MAX_VALUE); 
    btn0.setMaxWidth(Double.MAX_VALUE); 

    btn1.setMaxHeight(Double.MAX_VALUE); 
    btn1.setMaxWidth(Double.MAX_VALUE); 

    btn2.setMaxHeight(Double.MAX_VALUE); 
    btn2.setMaxWidth(Double.MAX_VALUE); 

    btn3.setMaxHeight(Double.MAX_VALUE); 
    btn3.setMaxWidth(Double.MAX_VALUE); 

    btn4.setMaxHeight(Double.MAX_VALUE); 
    btn4.setMaxWidth(Double.MAX_VALUE); 

    btn5.setMaxHeight(Double.MAX_VALUE); 
    btn5.setMaxWidth(Double.MAX_VALUE); 

    btn6.setMaxHeight(Double.MAX_VALUE); 
    btn6.setMaxWidth(Double.MAX_VALUE); 

    btn7.setMaxHeight(Double.MAX_VALUE); 
    btn7.setMaxWidth(Double.MAX_VALUE); 

    btn8.setMaxHeight(Double.MAX_VALUE); 
    btn8.setMaxWidth(Double.MAX_VALUE); 

    btn9.setMaxHeight(Double.MAX_VALUE); 
    btn9.setMaxWidth(Double.MAX_VALUE); 

    btnEquals.setMaxHeight(Double.MAX_VALUE); 
    btnEquals.setMaxWidth(Double.MAX_VALUE); 

    btnMC.setMaxHeight(Double.MAX_VALUE); 
    btnMC.setMaxWidth(Double.MAX_VALUE); 

    btnMMinus.setMaxHeight(Double.MAX_VALUE); 
    btnMMinus.setMaxWidth(Double.MAX_VALUE); 

    btnPlusOrMinus.setMaxHeight(Double.MAX_VALUE); 
    btnPlusOrMinus.setMaxWidth(Double.MAX_VALUE); 

    btnPercentage.setMaxHeight(Double.MAX_VALUE); 
    btnPercentage.setMaxWidth(Double.MAX_VALUE); 

    btnSqrt.setMaxHeight(Double.MAX_VALUE); 
    btnSqrt.setMaxWidth(Double.MAX_VALUE); 

    btn1OverX.setMaxHeight(Double.MAX_VALUE); 
    btn1OverX.setMaxWidth(Double.MAX_VALUE); 

    btnPlus.setMaxHeight(Double.MAX_VALUE); 
    btnPlus.setMaxWidth(Double.MAX_VALUE); 

    btnMinus.setMaxHeight(Double.MAX_VALUE); 
    btnMinus.setMaxWidth(Double.MAX_VALUE); 

    btnTimes.setMaxHeight(Double.MAX_VALUE); 
    btnTimes.setMaxWidth(Double.MAX_VALUE); 

    btnDivide.setMaxHeight(Double.MAX_VALUE); 
    btnDivide.setMaxWidth(Double.MAX_VALUE); 

    btnCE.setMaxHeight(Double.MAX_VALUE); 
    btnCE.setMaxWidth(Double.MAX_VALUE); 

    btnC.setMaxHeight(Double.MAX_VALUE); 
    btnC.setMaxWidth(Double.MAX_VALUE); 

    btnDot.setMaxHeight(Double.MAX_VALUE); 
    btnDot.setMaxWidth(Double.MAX_VALUE); 

    root.add(btnMC,0,1); 
    root.add(btnMR,1,1); 
    root.add(btnMS,2,1); 
    root.add(btnMPlus,3,1); 
    root.add(btnMMinus,4,1); 

    root.add(btnBack,0,2); 
    root.add(btnCE,1,2); 
    root.add(btnC,2,2); 
    root.add(btnPlusOrMinus,3,2); 
    root.add(btnSqrt,4,2); 

    root.add(btn7,0,3); 
    root.add(btn8,1,3); 
    root.add(btn9,2,3); 
    root.add(btnDivide,3,3); 
    root.add(btnPercentage,4,3); 

    root.add(btn4,0,4); 
    root.add(btn5,1,4); 
    root.add(btn6,2,4); 
    root.add(btnTimes,3,4); 
    root.add(btn1OverX,4,4); 

    root.add(btn1,0,5); 
    root.add(btn2,1,5); 
    root.add(btn3,2,5); 
    root.add(btnMinus,3,5); 
    root.add(btnEquals,4,5,1,2); 

    root.add(btn0,0,6,2,1); 
    root.add(btnDot,2,6); 
    root.add(btnPlus,3,6); 

    root.setVgap(5); 
    root.setHgap(5); 
    root.setPadding(new Insets(5,5,5,5)); 
    primaryStage.setScene(new Scene(root)); 
    primaryStage.show(); 


    Controller controller = new Controller(primaryStage.getScene()); 

} 

}

公共CLA SS型{

SimpleDoubleProperty totalResult = new SimpleDoubleProperty(0); 
SimpleDoubleProperty curNumber = new SimpleDoubleProperty(0); 
SimpleStringProperty stringDisplayed = new SimpleStringProperty(); 
String operatorPressed = ""; 
Boolean isDecimal = false; 
int decimalCouter = 0; 

public void plusOperator(){ 
    calculate(); 
    operatorPressed = "+"; 
} 

public void calculate(){ 
    switch (operatorPressed){ 
     case "+" : 
      totalResult.set(totalResult.get()+ curNumber.get()); 
      stringDisplayed.set(stringDisplayed.get()+" + " +curNumber.get()); 
      break; 
     case "*" : 
      totalResult.set(totalResult.get()*curNumber.get()); 
      stringDisplayed.set(stringDisplayed.get()+" * " +curNumber.get()); 
      break; 
     default: 
      totalResult.set(curNumber.get()); 
      stringDisplayed.set(curNumber.get()+""); 
    } 
    curNumber.set(0); 
    operatorPressed = ""; 
    isDecimal = false; 
    decimalCouter = 0; 
} 

public void multiplyOperator(){ 
    calculate(); 
    operatorPressed = "*"; 
} 

public void equalsOperator(){ 
    calculate(); 
    curNumber.setValue(totalResult.get()); 
    totalResult.set(0); 
} 

public void clearOperator(){ 
    totalResult.setValue(0); 
    curNumber.setValue(0); 
    stringDisplayed.set(""); 
    decimalCouter = 0; 
    isDecimal = false; 
} 

public void pressedNumber(int number){ 


    if(!isDecimal){ 
     curNumber.setValue(curNumber.get()*10+number); 
    } 
    else{ 
     decimalCouter++; 
     Double tempCurrentNum = curNumber.get(); 
     tempCurrentNum = tempCurrentNum*Math.pow(10,decimalCouter); 
     tempCurrentNum = tempCurrentNum+number; 
     tempCurrentNum = tempCurrentNum*Math.pow(10,-decimalCouter); 
     curNumber.set(tempCurrentNum); 

    } 
} 

public void dotOperator(){ 
    isDecimal = true; 
} 

}

公共類控制器{

Model newModel = new Model(); 


Controller(Scene scene){ 
    Button btnPlus, btnTimes, btnEquals, btnClear, btnDot; 
    Label textBox1, textBox2; 

    for(int ii=0;ii<=9;ii++){ 
     Button button = (Button)scene.lookup("#btn"+ii); 
     int finalIi = ii; 
     button.setOnMouseClicked(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       pressedNumber(finalIi); 
      } 
     }); 
    } 

    btnPlus = (Button)scene.lookup("#btnPlus"); 
    btnTimes = (Button)scene.lookup("#btnTimes"); 
    btnEquals = (Button)scene.lookup("#btnEquals"); 
    btnDot = (Button)scene.lookup("#btnDot"); 
    btnClear = (Button)scene.lookup("#btnClear"); 

    textBox1 = (Label)scene.lookup("#lblTextBox1"); 
    textBox2 = (Label)scene.lookup("#lblTextBox2"); 

    btnPlus.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      plusOperator(); 
     } 
    }); 

    btnTimes.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      multiplyOperator(); 
     } 
    }); 

    btnEquals.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      equalsOperator(); 
     } 
    }); 

    btnClear.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      clearOperator(); 
     } 
    }); 

    btnDot.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      dotOperator(); 
     } 
    }); 

    textBox1.textProperty().bind(newModel.stringDisplayed); 
    textBox2.textProperty().bind(newModel.curNumber.asString()); 


} 

public void pressedNumber(int number){ 
    newModel.pressedNumber(number); 
} 

public void plusOperator(){ 
    newModel.plusOperator(); 
} 

public void multiplyOperator(){ 
    newModel.multiplyOperator(); 
} 

public void equalsOperator(){ 
    newModel.equalsOperator(); 
} 

public void clearOperator(){ 
    newModel.clearOperator(); 
} 

public void dotOperator(){ 
    newModel.dotOperator(); 
} 

}

+0

解釋並給出更好的格式給你的答案,請不要粘貼代碼 –