【问题标题】:Binary to Decimal Applet with radio buttons带单选按钮的二进制到十进制小程序
【发布时间】:2011-11-07 20:19:44
【问题描述】:

我正在尝试制作一个将二进制转换为十进制并将十进制转换为二进制的小程序。我已经编写了针对每个人的小程序,但现在我想制作一个使用单选按钮来选择用户想要进行的转换,然后让转换按钮执行该转换的小程序。我现在被卡住了,不太确定从这里去哪里......它目前没有编译。

我还想包含一个向上或向下的箭头,具体取决于所选的单选按钮...我尝试将所述箭头的 Unicode 实现到 JLabel 中,但它们不接受字符,怎么办?关于这个?

非常感谢您的任何帮助。

这是我目前乱七八糟的代码...

编辑:

import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;

public class binaryAndDecimalConvert extends JApplet
{
    private JPanel bPanel;
    private JPanel dPanel;
    private JPanel buttonPanel;
    private JPanel radioPanel;
    private JPanel arrowPanel;

    private JLabel arrowUp;
    private JLabel arrowDown;

    private JTextField binaryTxt;
    private JTextField decimalTxt;

    private ButtonGroup radioButtonGroup;
    private JRadioButton binaryConvButton;
    private JRadioButton decimalConvButton;

    public void init()
    {
        Font font = new Font("display font", Font.BOLD, 15);



        //build the panels
        buildBpanel();
        buildArrowPanel();
        buildDpanel();
        buildButtonPanel();
        buildRadioPanel();



        //create Layout Manager.
        setLayout(new GridLayout(5, 1));

        // Add the panels to the content pan.
        add(bPanel);
        add(arrowPanel);
        add(dPanel);
        add(buttonPanel);
        add(radioPanel);
    }


    private void buildDpanel()
    {
        dPanel = new JPanel();
        dPanel.setBackground(Color.pink);
        JLabel message2 = new JLabel("Decimal Number: ");

        decimalTxt = new JTextField(15);

        dPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        dPanel.add(message2);
        dPanel.add(decimalTxt);
    }



    private void buildBpanel()
    {
        //create the panel
        bPanel = new JPanel();
        bPanel.setBackground(Color.pink);
        //create a label to display a mssage
        JLabel message1 = new JLabel("Binary Number: ");

        //create a text field for the binary number
        binaryTxt = new JTextField(15);


        //create a layout manager for the panel
        bPanel.setLayout(new FlowLayout(FlowLayout.LEFT));

        ///add the label and text field to the panel
        bPanel.add(message1);
        bPanel.add(binaryTxt);
    }

    public void buildRadioPanel()
    {
        radioPanel = new JPanel();
        radioPanel.setBackground(Color.pink);

        binaryConvButton = new JRadioButton("Binary to Decimal");
        decimalConvButton = new JRadioButton("Decimal to Binary");

        radioButtonGroup = new ButtonGroup();
        radioButtonGroup.add(binaryConvButton);
        radioButtonGroup.add(decimalConvButton);

        binaryConvButton.addActionListener(new RadioButtonListener());
        decimalConvButton.addActionListener(new RadioButtonListener());

        binaryConvButton.addActionListener(new RadioButtonListener());
        decimalConvButton.addActionListener(new RadioButtonListener());

        radioPanel.add(binaryConvButton);
        radioPanel.add(decimalConvButton);

        binaryConvButton.setEnabled(true);
    }

    public void buildArrowPanel()
    {
        arrowPanel = new JPanel();

        arrowUp = new JLabel("\u2191");
        arrowDown = new JLabel("\u2193");

        arrowPanel.setBackground(Color.pink);

        arrowPanel.add(arrowDown);

    }

    private class RadioButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource() == binaryConvButton)
            {
                arrowPanel.add(arrowUp);
            }
            else if(e.getSource() == decimalConvButton)
                arrowPanel.add(arrowDown);




        }
    }



    private void buildButtonPanel()
    {
        buttonPanel = new JPanel();
        buttonPanel.setBackground(Color.pink);
        JButton convButton = new JButton("Convert");

        convButton.addActionListener(new ButtonListener());
        buttonPanel.add(convButton);

    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            //binary to decimal conversion
            String decimalNum= "";
            int decimal1 = 0;
            String binaryNum = "";
            int power = 1;
            int dec;

            if(e.getSource() == decimalConvButton)
            {
            binaryNum=binaryTxt.getText();
            for(int i = 1; i <= binaryNum.length(); i++)
            {
                if(binaryNum.charAt(binaryNum.length()-i) == '1')
                {
                    decimal1 = (decimal1 + power);
                }
            power = (power*2);
            }
            decimalNum = Integer.toString(decimal1);
            decimalTxt.setText(decimalNum);
            }

            //decimal to binary
            if(e.getSource() == binaryConvButton)
            {
                  dec = Integer.parseInt(decimalTxt.getText());
                  while (dec != 0)
                  {
                        binaryNum = (dec % 2) + binaryNum;
                        dec /= 2;
                  }
                binaryTxt.setText(binaryNum);

            }
        }


    }
}

【问题讨论】:

  • 您需要告诉我们为什么或如何它无法编译。任何和所有错误消息都很重要。此外,您想在代码中包含这个或那个也很棒,但您需要向我们展示您为实现这一目标所做的尝试。
  • 我试图制作一个像 char upArrow = '\u2191'; 这样的字符。 char downArrow = '\2193';然后将它们添加到 JLabel 中,如果需要,我将添加到其中一个面板或为它制作另一个面板。虽然,我发现我无法向 JLabel 添加字符甚至字符串。除此之外,我不知道该尝试什么:(。
  • 你需要使用字符串而不是字符,所以它是"\u2191",而不是'\u2191'

标签: java swing unicode applet char


【解决方案1】:

您遇到的一个问题是,您在方法内部重新声明了一个类字段,并有效地“隐藏”了该字段,使其不可见。该字段是“二进制”

这是您最初声明它的地方:

public class BinaryAndDecimalConvert extends JApplet {
   private JPanel bPanel;

   //...

   private JTextField binary;

这里是你阴影的地方:

private class ButtonListener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
     String decimalNum = "";
     int decimal1 = 0;
     String binaryNum = "";
     int power = 1;

     String binary;  // **** redeclared here ****

     if (binaryToDec = true) {

        binaryNum = binary.getText(); // so this won't work

解决方案:不要将方法的局部变量与重要的类字段同名。

接下来,您尝试在字符串变量 binaryNumber 上调用 setText()

binaryNumber.setText(decimal1);

String没有这样的方法,所以去掉这个方法调用。

【讨论】:

  • 我更新了我的代码,它现在从二进制变为十进制,但我仍然无法让它正确地从十进制变为二进制。我仍然不知道如何显示 unicode 箭头。谢谢你
  • 再次编辑代码并更新原始帖子以反映更改...我发现无论我按下单选按钮,二进制到十进制转换总是有效,因为我的十进制到二进制永远不会有效,我不'不太明白为什么。你能推荐另一种编码我的 RadioButtonListener 的方法吗?谢谢!
  • 我会使用调试器来找出我的代码不工作的原因。或者在我的代码中的关键位置添加 println 语句来帮助我解决这个问题。
  • 我会继续这样做谢谢你,你认为单选按钮设置的布尔变量是个好主意吗?我觉得这就是我要去错的地方
  • 不,我可能会使用单选按钮的 actionlistener 来设置箭头 jlabel,但我只是让 JButton 的 ActionListener 检查选择了哪个 JRadioButton 而不是使用布尔值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多