簡體   English   中英

TextField不能按預期方式工作。 Java的

[英]TextField not work as expected. Java

我嘗試建立一個基本的計算器。 當我單擊按鈕編號時,我希望那個textField可以用作計算器(例如按154,顯示為154)。 不幸的是我沒有得到正確的結果。 例如,當我單擊9時,我得到0123456789。我不知道如何將按鈕int傳遞給and數組,然后將其作為字符串檢索。

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

public class Buttons {
    public static List<JButton> generateButtons(JFrame frame) {
    List<JButton> buttons = new ArrayList<>();
    int x = 20;
    int y = 500;
    for (int i = 0; i < 10; i++) {
        String str = Integer.toString(i);
        buttons.add(new JButton(str));
        buttons.get(i).setBounds(x, y, 50, 50);
        x += 60;
        frame.add(buttons.get(i));
        if (x >= 380) {
            x = 20;
            y = 430;
        }
    }
    return buttons;
}
    public static String displayOnTextField(List<JButton> list,JTextField field){
        int number = 0;
        String str = "";
        for (int i = 0; i <list.size(); i++){
            String returned = Integer.toString(i);
            str += returned;
            String finalStr = str;
            list.get(i).addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    field.setText(finalStr);
                }
            });
        }
        return str;
    }
}

主要:

import javax.swing.*;
import java.util.List;

public class main {
    public static void main(String[] args) {
    JFrame frame = new JFrame();
    JTextField textField = new JTextField();

    List<JButton> list =  Buttons.generateButtons(frame);
    String displayOnTextField = Buttons.displayOnTextField(list,textField);


    frame.setSize(400,600);
    textField.setBounds(150,40,150,30);
    frame.add(textField);
    frame.setLayout(null);
    frame.setVisible(true);

    }
}

謝謝。

您要附加的字符串是finalStr ,它是在循環中構建的。

    String returned = Integer.toString(i);
    str += returned;
    String finalStr = str;

如果您不希望它附加前面的字符,請不要使用+= 您可以簡單地使用:

    String finalStr = Integer.toString(i);

當您在循環中添加字符串時,您將從存儲在列表中的按鈕獲取如下:

            String returned = Integer.toString(i);
            str += returned;
            String finalStr = str;

因此,對於按鈕0,最后一個字符串將為0,對於按鈕1,最后一個字符串將為01 ,依此類推

相反,您可以執行以下操作:將finalStr字符串分配更改為

String finalStr =  Integer.toString(i);

actionPerformed方法中設置文本如下

field.setText(field.getText() + finalStr);

它將為您服務...

暫無
暫無

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

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