如何为已检查的JChechbox分配值?

时间:2011-06-22 09:06:23

标签: java swing jcheckbox

我正在创建一个简单的货币转换器,它在JTextField中取初始值,然后用户点击与其所需货币对应的JCheckBox,转换后的值将显示在另一个{{1} }}。基本上我想知道是否有任何方法为已经查看的JTextField分配值,我找不到明确的答案,任何帮助都将不胜感激。

例如,如果从Sterling到euro的当前转换率为1.12244,则在检查JCheckBox时将分配此值,因此原始值将乘以转换率。

6 个答案:

答案 0 :(得分:1)

如果您为action-listener分配JCheckBox并在触发此事件时进行转换,则认为会更容易。要检查是否已选中JCheckBox,您可以使用isSelected()方法

修改

实际上,我认为您需要在JRadioButton中使用ButtonGroup,因为您正在使用复选框,因此有可能选择了多个。{1}}。 Here是如何在单选按钮

上使用ButtonGroup和触发操作的示例

答案 1 :(得分:1)

这将为您提供复选框的值。

JCheckBox cb = ...;

// Determine status
boolean isSel = cb.isSelected();
if (isSel) {
    // The checkbox is now selected
} else {
    // The checkbox is now deselected
}

您可以更改JCheckBox

的动作侦听器上的值
// Create an action
Action action = new AbstractAction("CheckBox Label") {
    // This method is called when the button is pressed
    public void actionPerformed(ActionEvent evt) {
        // Perform action
        JCheckBox cb = (JCheckBox)evt.getSource();

        // Determine status
        boolean isSel = cb.isSelected();
        if (isSel) {
            // The checkbox is now selected
        } else {
            // The checkbox is now deselected
        }
    }
};

// Create the checkbox
JCheckBox checkBox = new JCheckBox(action);

答案 2 :(得分:1)

这可能不是最佳解决方案,但你可以试试这个。

  1. 取一个JCheckBox数组。
  2. 确保一次只选中一个复选框。
  3. 获取一系列货币转换价值。
  4. 现在根据所选复选框的索引从数组中获取货币转换值。
  5. 不使用JCheckBox,您可以使用@Balanivash建议的JRadioButton。更简单和正确的解决方案是使用JComboBox。[我和@Riduidel一起使用。]

答案 3 :(得分:1)

//这是完整的工作代码我希望这有助于enter image description here

public class CConvertor extends JFrame {        

    private  JLabel result;
    private  JCheckBox pk;
    private  JCheckBox ch;

    public CConvertor(){

        result = new JLabel();
        ch = new JCheckBox();
        pk = new JCheckBox();
        init();
    }

    public void init(){
        setTitle("JCheckBox Test");
        getContentPane().setLayout(new FlowLayout());
        add(result);
        add(new JLabel("        "));        
        add(new JLabel(" China "));
        add(ch);
        add(new JLabel(" Pakistan "));
        add(pk);
        setSize(400,80);
        pk.addActionListener(new ActionListener() {         

            public void actionPerformed(ActionEvent e) {
                ch.setSelected(false);
                result.setText("Pakistan selected");

            }
        });
        ch.addActionListener(new ActionListener() {         
            public void actionPerformed(ActionEvent e) {
                pk.setSelected(false);
                result.setText("China is Selected");

            }
        });

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args) {
    new CConvertor();

    }

}

答案 4 :(得分:1)

最容易做到的是这样的事情:

String[] ccys = {"USD", "EUR", "CHF", "JPY"};

public void initUI(){
 ...

 ButtonGroup grp = new ButtonGroup();

 for(String ccy : ccys){
  JCheckBox cb = new JCheckBox(ccy);
  cb.setActionCommand(ccy);
  cb.addActionListener(this);
  grp.add(cb);

  ...(add CheckBox to ui)
 }
}


private double getRate(String ccy){
  ...(retrieve the current conversion rate, f.ex from a map)
}

public void actionPerformed(ActionEvent evt){
  Double rate = getRate(evt.getActionCommand());
  ...(calculation, display)
}

答案 5 :(得分:1)

我也认为JCheckBox不是做你想做的最好的选择,但是......

为什么不将JCheckBox类扩展到CurrencyConverterCheckBox呢? 传递货币和转换的当前值作为参数。 e.g:

    public class CurrencyConverterCheckBox extends JCheckBox {
       private String from;
       private String to;
       private double value;

       public CurrencyConverterCheckBox(String from, String to, double value) {
           super();
           this.from = from;
           this.to = to;
           this.value = value;
       }
    }

然后,当用户点击复选框时,您就可以进行转换。您还可以在复选框旁边提供标签(USD到EUR)。您还可以在新复选框中提供一种方法来翻转货币并计算另一方向的乘数因子。

亲切的问候