- 私は前学期に Java を学び、先生は宿題を出しました - JavaFx で簡単な電卓を書き、1.0 から 4.0 まで何度も改訂した後、いくつかの小さな間違いはありましたが、なんとかやり遂げましたが、私はそうは思いませんそれについて今すぐ変更してください...
最初にやりましょう。
コードは以下のように表示されます
package Task2;
import static java.lang.Math.round;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.layout.Border;
import javafx.scene.layout.GridPane;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class Counter4 extends Application implements EventHandler<ActionEvent>{
Button[] btn = new Button[20];
TextField txt, txt2;
String input;
double[] num = new double[10];
char[] ops = new char[8];
int count=0;
int start=0;
double res=0;
int len;
String myop = "%+-x/";
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage){
GridPane root = new GridPane();
root.setStyle("-fx-background-color:linear-gradient(to bottom right,#ff33aa,#ffff00)");
root.setPadding(new Insets(2, 1, 8, 1));
root.setAlignment(Pos.BOTTOM_CENTER);
root.setHgap(1);
root.setVgap(2);
Font font = new Font("Arial", 16);
txt = new TextField();
txt.setFont(font);
txt.setAlignment(Pos.TOP_RIGHT);
txt.setEditable(false);
txt.setBorder(Border.EMPTY);
txt2 = new TextField();
txt2.setFont(Font.font(18));
txt2.setAlignment(Pos.CENTER_RIGHT);
txt2.setEditable(false);
txt2.setPromptText("result");
GridPane.setColumnSpan(txt, 4);
GridPane.setColumnSpan(txt2, 4);
GridPane.setMargin(txt, new Insets(0, 0, 3, 0));
root.add(txt, 0, 0);
root.add(txt2, 0, 1);
Label lab = new Label("@hcf");
root.add(lab, 3, 7);
GridPane.setHalignment(lab, HPos.RIGHT);
int num = 8;
for(int row=3;row<6;row++){
for(int col=0;col<3;col++){
btn[num] = new Button(String.valueOf(num+1));
btn[num].setPrefSize(80, 50);
btn[num].setFont(font);
root.add(btn[num], col, row);
btn[num].setOnAction(this);
num--;
}
}
num = 9;
String[] tag = {
"M","del","C","%","0",".","=","/","+","-","x"};
for(int j=0;j<4;j++){
btn[num] = new Button(tag[j]);
btn[num+1] = new Button(tag[j+4]);
btn[num].setPrefSize(80, 50);
btn[num+1].setPrefSize(80, 50);
btn[num].setFont(font);
btn[num+1].setFont(font);
root.add(btn[num], j, 2);
root.add(btn[num+1], j, 6);
btn[num].setOnAction(this);
btn[num+1].setOnAction(this);
num = num+2;
}
for(int i=3;i<6;i++){
btn[num] = new Button(tag[i+5]);
root.add(btn[num], 3, i);
btn[num].setPrefSize(80, 50);
btn[num].setFont(font);
btn[num].setOnAction(this);
num++;
}
Scene scene = new Scene(root, 330, 400);
stage.setScene(scene);
stage.setTitle("Counter4.0");
stage.getIcons().add(new Image("Counter.jpg"));
stage.setResizable(false);
stage.show();
}
@Override
public void handle(ActionEvent event){
Button btnClicked= (Button) event.getSource();
String op=btnClicked.getText();
switch(op){
case "0":
len = txt.getText().length();
if(txt.getText(start, len).equals("0")){
break;
}
txt.setText(txt.getText()+"0");break;
case "1":
txt.setText(txt.getText()+"1");break;
case "2":
txt.setText(txt.getText()+"2");break;
case "3":
txt.setText(txt.getText()+"3");break;
case "4":
txt.setText(txt.getText()+"4");break;
case "5":
txt.setText(txt.getText()+"5");break;
case "6":
txt.setText(txt.getText()+"6");break;
case "7":
txt.setText(txt.getText()+"7");break;
case "8":
txt.setText(txt.getText()+"8");break;
case "9":
txt.setText(txt.getText()+"9");break;
case ".":
len = txt.getText().length();
if(txt.getText(len-1, len).equals(".")||len==0){
break;
}
else if(txt.getText(start, len).indexOf(".")!=-1){
break;
}
else{
txt.setText(txt.getText()+".");
}break;
case "C":
txt.setText("");break;
case "del":
len = txt.getText().length();
if(len==0)
break;
txt.setText(txt.getText(0, len-1));break;
case "M"://将得到的结果变成下次计算的数值
txt.setText(txt2.getText());
txt2.setText("");break;
case "/":
len = txt.getText().length();
if(len==0)break;
else if(myop.contains(txt.getText(len-1, len))){
break;
}
txt.setText(txt.getText()+"/");
num[count]=Double.valueOf(txt.getText(start, len));
start=len+1;
ops[count]='/';
count++;break;
case "x":
if(len==0)
break;
len = txt.getText().length();
if(myop.contains(txt.getText(len-1, len))){
break;
}
txt.setText(txt.getText()+"x");
num[count]=Double.valueOf(txt.getText(start, len));
start=len+1;
ops[count]='*';
count++;break;
case "+":
len = txt.getText().length();
if(len==0)
break;
if(myop.contains(txt.getText(len-1, len))){
break;
}
txt.setText(txt.getText()+"+");
num[count]=Double.valueOf(txt.getText(start, len));
start=len+1;
ops[count]='+';
count++;break;
case "-":
len = txt.getText().length();
if(len==0)
break;
if(myop.contains(txt.getText(len-1, len))){
break;
}
txt.setText(txt.getText()+"-");
num[count]=Double.valueOf(txt.getText(start, len));
start=len+1;
ops[count]='-';
count++;break;
case "%":
len = txt.getText().length();
if(len==0)
break;
if(myop.contains(txt.getText(len-1, len))){
break;
}
txt.setText(txt.getText()+"%");
num[count]=Double.valueOf(txt.getText(start, len));
start=len+1;
ops[count]='%';
count++;break;
case "=":
len = txt.getText().length();
num[count]=Double.valueOf(txt.getText(start, len));
for(int i=0;i<count;i++){
if(ops[i]=='*'){
num[i+1]=num[i]*num[i+1];
num[i]=0;
ops[i]='+';
if(i>0&&ops[i-1]=='-'){
ops[i]='-';
}
}
else if(ops[i]=='/'){
if(num[i+1]==0){
break;
}
num[i+1]=num[i]/num[i+1];
ops[i]='+';
num[i]=0;
if(i>0&&ops[i-1]=='-'){
ops[i]='-';
}
}
else if(ops[i]=='%'){
num[i+1]=round(num[i])%round(num[i+1]);
ops[i]='+';
num[i]=0;
if(i>0&&ops[i-1]=='-'){
ops[i]='-';
}
}
}
res=num[0];
for(int j=0;j<count;j++){
if(ops[j]=='+'){
res+=num[j+1];
}
else{
res-=num[j+1];
}
}
txt2.setText(String.valueOf(res));
for(int a=0;a<count;a++){
num[a]=0;
ops[a]='\0';
}
num[count]=0;
count=0;
res=0;
start=0;
break;
default:break;
}
}
}
運用実績
- ちょっとした考え: 実は、私は GUI インターフェイスを作成するのが好きです. プロセスは非常に面倒ですが、それでも効果は非常に良いです!