簡體   English   中英

帶有單選按鈕的二進制到十進制小程序

[英]Binary to Decimal Applet with radio buttons

我正在嘗試創建一個將二進制轉換為十進制,十進制轉換為二進制的applet。 我已經編寫了每個人的小程序,但現在我想創建一個使用單選按鈕選擇用戶想要進行的轉換,然后讓轉換按鈕執行轉換。 我現在卡住了,不太確定從哪里開始...它目前沒有編譯。

我還希望包含一個向上或向下指向的箭頭,具體取決於所選的單選按鈕...我已經嘗試將所述箭頭的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);

            }
        }


    }
}

你遇到的一個問題是,你正在重新聲明一個方法中的一個類字段,並有效地“遮蔽”該字段使其不可見。 該字段是“二進制”

這是您最初聲明的地方:

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

解決方案:不要將方法的變量賦予與重要類字段同名的方法。

接下來,您嘗試在String變量binaryNumber上調用setText()

binaryNumber.setText(decimal1);

String沒有這樣的方法,所以擺脫這個方法調用。

暫無
暫無

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

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