我正在尝试为此制作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
答案 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()
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事件。