簡體   English   中英

如何在單擊另一個Jbutton時更改Jbutton的功能?

[英]How to change a Jbutton's function on clicking another Jbutton?

我正在編寫一個程序,它將磅數轉換為磅,公斤數轉換為磅。 輸出窗口如下:

在此處輸入圖片說明

當我想將千克轉換成磅時,我單擊開關按鈕,輸出如下所示:

在此處輸入圖片說明

但是問題是當我單擊“轉換”時,它仍然將重量轉換為千克而不是磅。

我希望在單擊“切換”按鈕時更改“轉換”按鈕的功能,以便將千克換算為磅。 請幫忙。

我的源代碼如下:

public class convertApp extends JFrame implements ActionListener {
private JLabel poundlbl = new JLabel("Weight in Pounds");
private JLabel kglbl = new JLabel("Weight in Kilograms");

private JTextField poundbx= new JTextField(12);
private JTextField kgbx= new JTextField(12);

private JButton conbtn=new JButton("Convert");
private JButton switchbtn=new JButton("Switch");
private JButton newconbtn=new JButton("Convert");
private JPanel bxPanel = new JPanel();

public convertApp(){
    super("Weight Converter");
    bxPanel.setLayout(new GridLayout(5,29,5,5));
    bxPanel.add(poundlbl);
    bxPanel.add(poundbx);
    bxPanel.add(kglbl);
    bxPanel.add(kgbx);
    bxPanel.add(conbtn);
    bxPanel.add(switchbtn);

    //bxPanel.setBackground(Color.gray);



    this.setLayout(new GridLayout(1,1,0,0));
    this.add(bxPanel);



    this.setVisible(true);
    //what to do if i close
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //put window in the center
    this.setLocationRelativeTo(null);
    //disable resize
    this.setResizable(false);
    //pack all the components within the window
    this.pack();

    conbtn.addActionListener(this);
    switchbtn.addActionListener(this);


}

public void actionPerformed(ActionEvent evnt){
   if(evnt.getSource()==conbtn){
        String poundtext = poundbx.getText();
        int pound = Integer.parseInt(poundtext);

        double kilo = pound * 0.453592;

        kgbx.setText(""+kilo);
    }

   else if(evnt.getSource()==switchbtn)
    {
        poundlbl.setText("Weight in Kilograms:");
        kglbl.setText("Weight in Pounds:");

        if(evnt.getSource()==conbtn){
        String kilotext = poundbx.getText();
        int kilo = Integer.parseInt(kilotext);

        double pound = kilo * 2.20462;

        kgbx.setText(""+pound);
        }

    }


}

}

您不能更改功能本身。 單擊“切換”按鈕時,可以創建一個設置為true或false(您的選擇)的標志。 然后,在單擊“轉換”時檢查該標志的值,並根據標志約定執行適當的轉換。

Boolean isPtoK = true;

// [...]

if(isPtoK){
  // convert pounds to kilos
} else{
  // kilos to pounds
}

我將創建一個單獨的函數,以在單擊“ switch”時切換標志的值。

創建布爾變量

boolean switch=true;

void kiloGramToPound{
//Convert Codes Here
}

void PoundToKiloGram{
//Convert Codes Here
}

轉換按鈕動作執行

if(switch==true){
     kiloGramToPound();
}else{
     PoundToKiloGram();
}

切換按鈕動作執行

if(switch==true){
    switch=false;
}else{
  switch=true;
}

抱歉不能回答您的問題,但我建議您嘗試使用KeyListener / KeyAdapter而不是ActionListeners和按鈕的組合。

例:

textField1.addKeyListener(new ConverterListener(textField2, "2.20462"));
textField2.addKeyListener(new ConverterListener(textField1, "0.453592"));


class ConverterListener extends KeyAdapter {

    JTextField destination;
    String multiplier;

    public ConverterListener(JTextField destination, String multiplier) {
        this.destination = destination;
        this.multiplier = multiplier;
    }

    @Override
    public void keyReleased(KeyEvent e) {
        JTextField source = (JTextField) e.getSource();
        String result = convert(source.getText(), multiplier);
        destination.setText(result);
    }

    private String convert(String value, String multiplier) {
        String result = "0";

        try {
            double dblValue = value.isEmpty() ? 0d : Double.parseDouble(value);
            double dblMultiplier = value.isEmpty() ? 0d : Double.parseDouble(multiplier);

            result = Double.toString(dblValue * dblMultiplier);
        } catch (Exception e) {
            System.out.println(e);
        }

        return result;
    }

}

暫無
暫無

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

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