Java 十六进制到二进制到十进制GUI
我正在尝试为此制作一个GUI。基本上你按下一个按钮,把十六进制转换成二进制和十进制。我觉得我的密码越来越接近了。到目前为止,我创建了一个drive类和一个panel类。我试图在我的panel类中创建方法,将十六进制转换为二进制,将十六进制转换为十进制。不过,我还是经常出错,我不知道为什么。我一直在遵循我的其他代码,但我一直在努力将这些方法放在panel类的底部。到目前为止,我会给你看我的课程 驾驶员等级:Java 十六进制到二进制到十进制GUI,java,swing,binary,hex,converter,Java,Swing,Binary,Hex,Converter,我正在尝试为此制作一个GUI。基本上你按下一个按钮,把十六进制转换成二进制和十进制。我觉得我的密码越来越接近了。到目前为止,我创建了一个drive类和一个panel类。我试图在我的panel类中创建方法,将十六进制转换为二进制,将十六进制转换为十进制。不过,我还是经常出错,我不知道为什么。我一直在遵循我的其他代码,但我一直在努力将这些方法放在panel类的底部。到目前为止,我会给你看我的课程 驾驶员等级: import javax.swing.JFrame; public class Dri
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,这会导致一些问题
任何帮助都将不胜感激。我意识到这篇文章很长。我只是不确定我的错误在哪里。它可能在panel类的开头,也可能就在末尾,所以我认为发布整个代码将有助于识别问题。如果你能给我任何指导,我将不胜感激。我至少在正确的轨道上吗?我一直在努力得到这个。谢谢
编辑:
好的,我刚刚在JGrasp中运行了它,这些是我得到的错误。它在eclipsetho中运行
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
对于编译器错误;
您的方法binaryConversion
有一个参数double decimal
,它将隐藏名为decimal的JLabel
。这意味着您实际上是在double
上调用getText()
。您还定义了名为decimal的字符串,这进一步混淆了编译器。
请尝试以下方法:
public void decimalConversion(double d) {
String s = decimal.getText();
try {
Integer c = Integer.valueOf(s);
} catch (NumberFormatException ee) {
ee.printStackTrace();
}
}
在小数转换中
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();
}
}
}
下面是一个将文本从十六进制转换为整数和二进制的示例:
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
对于编译器错误;
您的方法binaryConversion
有一个参数double decimal
,它将隐藏名为decimal的JLabel
。这意味着您实际上是在double
上调用getText()
。您还定义了名为decimal的字符串,这进一步混淆了编译器。
请尝试以下方法:
public void decimalConversion(double d) {
String s = decimal.getText();
try {
Integer c = Integer.valueOf(s);
} catch (NumberFormatException ee) {
ee.printStackTrace();
}
}
在小数转换中
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();
}
}
}
下面是一个将文本从十六进制转换为整数和二进制的示例:
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
您好,我在您的代码中发现了几个错误
一,-
首先,当您试图转换Textfield时,它应该是字符串,您必须首先使用方法.getText()
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也是如此
三,-
第三项,未找到导致转换的事件,您应该为每个转换添加一个按钮并分配一个actionPerformed事件。您好,我在代码中发现了几个错误
一,-
首先,当您试图转换Textfield时,它应该是字符串,您必须首先使用方法.getText()
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也是如此
三,-
第三项,未找到导致转换的事件,您应该为每个转换添加一个按钮,并分配一个actionPerformed事件。如果您不断收到错误,请向我们显示这些错误。还请阅读它们,因为java错误通常会告诉您什么是错误的=)我使用eclipse,在编译之前可以看到错误,因为它以红色突出显示它们。对于十进制转换尝试,“decimal”高亮显示为红色,“getText”高亮显示为红色,“valueOf”高亮显示为红色,“parseInt”高亮显示为红色。对于我的二进制转换尝试,只有“valueOf”高亮显示为红色。我现在将尝试编译,看看它会给我@Mike带来什么样的错误。六羟甲基三聚氰胺六甲醚。。。我只是试着编译,但没有给我一个错误。它显示了我到目前为止使用的GUI。但是,我知道实际的逻辑是错误的,因为它突出显示为红色。Eclipse还有一个控制台,它将为您提供错误文本。如果您还没有看到这个,请确保打开它,然后读取javac错误输出@mike。出于某种原因,它没有在控制台中显示错误。但是我确实在“问题”部分看到了一些东西,这里有一个描述资源路径位置类型Integer类型中的方法valueOf(String,int)不适用于参数(JTextField,int)ConverterPanel.java第89行java问题如果您不断出现错误,请向我们展示这些错误。还请阅读它们,因为java错误通常会告诉您什么是错误的=)我使用eclipse,在编译之前可以看到错误,因为它以红色突出显示它们。对于十进制转换尝试,“decimal”高亮显示为红色,“getText”高亮显示为红色,“valueOf”高亮显示为红色,“parseInt”高亮显示为高电平