我有一个我正在处理的代码,我想为bin,octal,hex和decimal构建一个转换器。我有一个框架,其中有一个文本空间,您可以输入其中任何一个选项。根据您输入输入的位置,程序会将其转换为其他形式。我的问题是,它可以将小数转换为其他形式,但反之亦然?我感到困惑,因为我觉得逻辑流程在那里,任何帮助都会受到这位编码员的极大赞赏。
import javax.swing.*; //library used for the layout
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Gui extends JFrame implements ActionListener{
JLabel l1 = new JLabel(" Decimal ");
JLabel l2 = new JLabel(" Binary ");
JLabel l3 = new JLabel(" Octal ");
JLabel l4 = new JLabel(" Hexadecimal ");
JTextField f1 = new JTextField(20);
JTextField f2 = new JTextField(20);
JTextField f3 = new JTextField(20);
JTextField f4 = new JTextField(20);
JButton b1 = new JButton("Calculate");
public Gui() {
setLayout(new FlowLayout()); //row x column
add(l1);
add(f1);
add(l2);
add(f2);
add(l3);
add(f3);
add(l4);
add(f4);
add(b1);
b1.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==this.b1){
if(this.f1.getText()!="")
{
String text1 = this.f1.getText();//get the text and store it in a string named text1
int num1 = Integer.parseInt(text1); // get the integer value of the variable text1
String binary = Integer.toBinaryString(num1); //convert the variable num1 to binary
this.f2.setText(binary);
String octal = Integer.toOctalString(num1); //convert the variable num1 to binary
this.f3.setText(octal);
String hexadecimal = Integer.toHexString(num1); //convert the variable num1 to binary
this.f4.setText(hexadecimal);
}
}
}
}
答案 0 :(得分:1)
此行要求字符串为十进制。
int num1 = Integer.parseInt(text1);
如果文本不总是十进制,则需要一种方法让用户指定文本的格式。
您可以使用radix参数解析二进制,八进制和十六进制。
解析二进制文件:
int num1 = Integer.parseInt(text,2);
解析八进制:
int num1 = Integer.parseInt(text,8);
解析十六进制:
int num1 = Integer.parseInt(text,16);
要指定使用哪个,您可以有多个按钮或向每个JTextField添加一个ActionListener。每个人都从该字段中读取文本并设置其他值。
答案 1 :(得分:0)
我很困惑,因为我认为逻辑流程就在那里,
不,您拥有此逻辑,查看f1
字段并将该十进制值转换为其他格式。
根据您输入输入的位置,程序将转换它 到其他形式。
我想你想要实现的是各种形式的任何形式的价值,并在用户按下计算按钮时将其转换为其他格式。
因此,您将决定如何执行此操作,
天气您要删除计算按钮并更新收听每个JTextField上的更改的字段。
保留“计算”按钮,并假设上次更新的JTextField是您用于转换为其他格式的JTextField。
在任何一种情况下,
您必须收听JTextField的更改。使用,
// Listen for changes in the text f1
f1.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
update();
}
public void removeUpdate(DocumentEvent e) {
update();
}
public void insertUpdate(DocumentEvent e) {
update();
}
public void update() {
// update a local variable to keep the last updated JTextFeild
// or update to the rest of the formats on the fly.
// You can update/ show errors of the input values
//Scenario 1,
int decimal = Integer.parseInt(f1.getText());
String binary = Integer.toBinaryString(decimal); //convert the variable num1 to binary
this.f2.setText(binary);
String octal = Integer.toOctalString(decimal); //convert the variable num1 to binary
this.f3.setText(octal);
String hexadecimal = Integer.toHexString(decimal); //convert the variable num1 to binary
this.f4.setText(hexadecimal);
}
});