十六进制到二进制到十进制GUI

时间:2013-12-18 17:41:14

标签: java swing binary hex converter

我正在尝试为此制作GUI。基本上你按一个按钮,你将十六进制转换为二进制和十进制。我觉得我的代码越来越近了。到目前为止,我创建了一个驱动器类和一个面板类。我正在尝试在我的面板类中创建方法,将十六进制转换为二进制,十六进制转换为十进制。我不断收到错误,我不知道为什么。我一直在关注我的其他代码,但我一直在努力将这些方法放在面板类的底部。到目前为止,我会告诉你我的课程。

驱动程序类:

import javax.swing.JFrame;


public class DriverConverter {

    //--------------------------------------------------------
    // GUI for Converter
    //--------------------------------------------------------
    public static void main(String[] args) {
    JFrame frame = new JFrame ("Hexadecimal to Binary and Decimal.");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    frame.getContentPane().add(new ConverterPanel());
    frame.pack();
    frame.setVisible(true);

    }
}

这是我的小组课程:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridLayout;
import java.awt.event.InputMethodListener;
import java.util.Scanner;
import java.text.NumberFormat;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ConverterPanel extends JPanel {
    private JLabel[] binary;
    private JLabel decimal;
    private JLabel inputLabel, outputLabel, resultLabel, totalLabel, totalLabel2;
    private JButton BinaryConvert, DecimalConvert;
    private JTextField hexString;
    private Font convertFont;
    private double total;


    //-------------------------------------------------------------
    // Main GUI
    //-------------------------------------------------------------

    public ConverterPanel() {

        setLayout(new BorderLayout());
        setPreferredSize(new Dimension(400,300));

        hexString =  new JTextField();
        //hexadecimal.addActionListener(new ConvertListener());
        add(hexString);


        JLabel converterName = new JLabel ("Hexadecimal Converter");
        JPanel panelName = new JPanel();
        panelName.add(converterName);
        add(panelName, BorderLayout.NORTH);

        JPanel totalPanel = new JPanel();
        totalPanel.add(new JLabel ("Binary"));
        totalLabel = new JLabel ("------");
        totalPanel.add(totalLabel);
        add(totalPanel, BorderLayout.SOUTH);

        JPanel totalPanel2 = new JPanel();
        totalPanel2.add(new JLabel ("Decimal"));
        totalLabel2 = new JLabel ("------");
        totalPanel2.add(totalLabel);
        add(totalPanel2, BorderLayout.EAST);


    }

    // -------------------------------------------------------------
    // Equation  for Binary Conversion
    //--------------------------------------------------------------

    public void binaryConversion (double binary){

        try {
             Integer b = Integer.valueOf(hexString,16);
             Integer.toBinaryString(b);
           } catch (NumberFormatException ee) {
             ee.printStackTrace();
           }

    }

    // Equation for decimal conversion.

    public void decimalConversion (double decimal){

        String decimal = decimal.getText();
         try {
             Integer c = Integer.valueOf(hexString,16);
             Integer.parseInt(hexString, 16);
           } catch (NumberFormatException ee) {
             ee.printStackTrace();
           }



        //Integer c = Integer.valueOf("444", 16);
        //Integer.parseInt("444",16);
    }



}

我一直在底部试验这些方法。我一直在尝试创建它们而没有任何错误。我也尝试使用JTextField的getText()方法。我觉得我可以接近这个,但是我的逻辑是“关闭”我创建这些方法将十六进制转换为二进制,二进制转换为十进制。我实际上知道标准编辑器中的代码。在编辑器中对我有意义,因为你所做的就是system.out.println结果。它正在为一个导致一些问题的GUI进行翻译。

非常感谢任何帮助。我知道这个帖子很久了。我只是不确定我的错误在哪里。它可能是在小组类的开头,或者只是在最后,所以我认为发布整个代码将有助于识别问题。我很感激你能给我的任何指导。我至少走在正确的轨道上吗?我一直在努力想要得到这个。感谢。

编辑:

好的,我刚刚在JGrasp中运行它,这些是我得到的错误。它运行在Eclipse中。

Exception in thread "main" java.lang.NoClassDefFoundError: ConverterPanel
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
    at java.lang.Class.getMethod0(Class.java:2774)
    at java.lang.Class.getMethod(Class.java:1663)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: ConverterPanel
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more

2 个答案:

答案 0 :(得分:2)

编译错误; 您的方法binaryConversion有一个参数double decimal,它会隐藏JLabel被调用的小数。这意味着您实际上正在getText()上调用double。您还将String定义为decimal,这会进一步混淆编译器。 试试这个:

public void decimalConversion(double d) {

    String s = decimal.getText();
    try {
        Integer c = Integer.valueOf(s);
    } catch (NumberFormatException ee) {
        ee.printStackTrace();
    }
}

decimalConversion Integer.valueOf(hexString,16);应为Integer.valueOf(hexString.getText(),16);


这是你如何做到这一点的一种方式。通过这种方式,您可以输入文本并按Enter键,它将被翻译为十进制和二进制,并显示在标签上:

public class ConverterPanel extends JPanel {
    private JLabel binaryLabel = new JLabel();
    private JLabel decimalLabel = new JLabel();
    private JTextField  hexString = new JTextField();
    // omitted some variables

    public ConverterPanel() {

        setLayout(new BorderLayout());
        setPreferredSize(new Dimension(400, 300));
        setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JLabel converterName = new JLabel("Hexadecimal Converter");
        hexString.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                convertInput();
            }
        });

        JPanel panelName = new JPanel(new GridLayout(1,2));
        panelName.add(converterName);
        panelName.add(hexString);
        add(panelName, BorderLayout.NORTH);


        JPanel totalPanel = new JPanel(new GridLayout(1,3));
        totalPanel.add(new JLabel("Binary"));
        totalLabel = new JLabel("------");
        totalPanel.add(totalLabel);
        totalPanel.add(binaryLabel);

        JPanel totalPanel2 = new JPanel(new GridLayout(1,3));
        totalPanel2.add(new JLabel("Decimal"));
        totalLabel2 = new JLabel("------");
        totalPanel2.add(totalLabel2);
        totalPanel2.add(decimalLabel);

        JPanel south = new JPanel(new GridLayout(2,1));
        south.add(totalPanel);
        south.add(totalPanel2);
        add(south, BorderLayout.SOUTH);

    }        

    private void convertInput() {

        try {
            Integer n = Integer.valueOf(hexString.getText(), 16);
            decimalLabel.setText(String.valueOf(n));
            binaryLabel.setText(Integer.toBinaryString(n));
        } catch (NumberFormatException ee) {
            ee.printStackTrace();
        }
    }
}

以下是将文本从十六进制转换为int和二进制文件的示例:

public class Test {
    public static void main(String[] args) {
        String string = "A3";
        int parseInt = Integer.parseInt(string, 16);
        System.out.println(parseInt);
        System.out.println(Integer.toBinaryString(parseInt));
    }
}

输出:

163
10100011

答案 1 :(得分:2)

您好我在您的代码中发现了几个错误

1 .-

首先,您尝试将Textfield转换为String时,必须首先使用方法.getText()

获取Textfield的值
public void binaryConversion (double binary){

        try {
             Integer b = Integer.valueOf(hexString.getText(),16);
             Integer.toBinaryString(b);
           } catch (NumberFormatException ee) {
             ee.printStackTrace();
           }

    }

2.其次,您正在尝试为已声明为方法参数的变量赋值,因此您应该更改方法变量的名称。

public void decimalConversion(double decimal) {

        String decimal2 = String.valueOf(decimal);
        try {
            Integer c = Integer.valueOf(hexString.getText(), 16);
            Integer.parseInt(hexString.getText(), 16);
        } catch (NumberFormatException ee) {
            System.out.println(ee.getMessage());
        } 
    }

并在此方法中检查第1点

3 .-

第三项,未找到导致转化的事件,您应为每次转化添加一个按钮并指定一个actionPerformed事件。