Java 图形用户界面二进制到十进制转换器

Java 图形用户界面二进制到十进制转换器,java,swing,jframe,awt,Java,Swing,Jframe,Awt,我试图完成我的程序,它所做的只是不断打开一个新的JFrame。我做错了什么 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class BinaryConverter { public static void main(String[] args) { new BinaryConverter(); } private JFrame frame;

我试图完成我的程序,它所做的只是不断打开一个新的
JFrame
。我做错了什么

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class BinaryConverter {

    public static void main(String[] args) {
        new BinaryConverter();
    }

    private JFrame frame;
    private JButton button;
    private JTextField text;
    private JTextField text2;
    private String decimalnumber = null;

    // Constructor - builds and displays the window.
    public BinaryConverter() {
        frame = new JFrame("Let's Convert!");

        // Create JLabel object for "Binary:" and add it to frame.
        JLabel label = new JLabel("Binary:");
        frame.setLayout(new FlowLayout());
        frame.add(label);

        // Create JTextField object and add it to frame
        text = new JTextField(15);
        frame.add(text);

        // Create JLabel object for "Decimal:" and add it to frame.
        JLabel label2 = new JLabel("Decimal:");
        frame.add(label2);

        // Create JTextField object and add it to frame
        text2 = new JTextField(15);
        frame.add(text2);

        // Create JButton object and add it to frame.
        button = new JButton("Convert");
        button.addActionListener(new ButtonListener());
        frame.add(button);

        // Set frame attributes and make frame visible
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(250, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public void Convert() {
        String binary = text.getText(); // inserted binary number
        int i;
        for (i = 0; i < binary.length(); i++) { // The exponent
            char select = binary.charAt(binary.length() - i);
            char number = (char) (select * Math.pow(2, i));
            decimalnumber += number;
        }
    }

    public class ButtonListener implements ActionListener {

        // This method is called automatically when button is clicked.
        // Every Listener must have this method.
        public void actionPerformed(ActionEvent e) {
            BinaryConverter c = new BinaryConverter();
            c.Convert();
            if (button.getText().equals("Convert")) {
                text2.setText(decimalnumber);
                text.getText();
                text2.getText();
            } else {
            }
        }
    }
}
import java.awt.*;
导入javax.swing.*;
导入java.awt.event.*;
公共类二进制转换器{
公共静态void main(字符串[]args){
新的二进制转换器();
}
私有JFrame;
私人按钮;
私有JTextField文本;
私有JTextField text2;
私有字符串小数=null;
//构造函数-生成并显示窗口。
公共二进制转换器(){
frame=newjframe(“让我们转换!”);
//为“Binary:”创建JLabel对象并将其添加到框架中。
JLabel标签=新的JLabel(“二进制:”);
frame.setLayout(新的FlowLayout());
框架。添加(标签);
//创建JTextField对象并将其添加到框架中
text=新的JTextField(15);
框架。添加(文本);
//为“Decimal:”创建JLabel对象并将其添加到框架中。
JLabel label2=新的JLabel(“十进制:”);
添加框架(标签2);
//创建JTextField对象并将其添加到框架中
text2=新的JTextField(15);
frame.add(text2);
//创建JButton对象并将其添加到框架中。
按钮=新按钮(“转换”);
addActionListener(new ButtonListener());
框架。添加(按钮);
//设置帧属性并使帧可见
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(250300);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
公共void Convert(){
String binary=text.getText();//插入的二进制数
int i;
对于(i=0;i
这将创建(并显示)一个新的
二进制转换器实例

// This method is called automatically when button is clicked.
// Every Listener must have this method.
public void actionPerformed(ActionEvent e) {
    BinaryConverter c = new BinaryConverter();  //create/show a NEW instance!
    c.Convert();
    if (button.getText().equals("Convert")) {
        text2.setText(decimalnumber);
        text.getText();
        text2.getText();
    } else {
    }
}
这就是它显示GUI新实例的原因

因此,请替换:

        BinaryConverter c = new BinaryConverter();
        c.Convert();
简单地说:

        Convert();

public void actionPerformed(ActionEvent e){BinaryConverter c=new BinaryConverter();
这将创建(并显示)一个
BinaryConverter
的新实例!我确实使用了调试器,但不幸的是,它没有显示任何内容。提示:添加@ControlAltDel(或其他任何人,
@
很重要)通知此人新的注释。线程“AWT-EventQueue-0”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:binaryconverter.binaryconverter.binaryconverter.Convert(binaryconverter.java:56)处的2处的java.lang.String.charAt(String.java:658)处的binaryconverter.binaryconverter$ButtonListener.actionPerformed(BinaryConverter.java:67)不char select=binary.charAt(binary.length()-i);只需说select将连续检查特定字符串,例如,第5行,然后是4、3、2等?我认为这不会对转换方法
StringIndexOutOfBoundsException
产生影响。因此,解决了“多个GUI”的原始问题?如果有助于解决问题,请回答。(并就新错误提出新问题。)