Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为十六进制到二进制到十进制转换器组织GUI?(爪哇)_Java_User Interface_Layout_Converter - Fatal编程技术网

Java 为十六进制到二进制到十进制转换器组织GUI?(爪哇)

Java 为十六进制到二进制到十进制转换器组织GUI?(爪哇),java,user-interface,layout,converter,Java,User Interface,Layout,Converter,我试图写一个程序,将十六进制转换成二进制,再转换成十进制,并且可以转换成5位数的十六进制数。转换是一个完全不同的问题,现在我一直在组织GUI。接口的标准是它必须有:一个用于输入十六进制数的窗口(一个文本框),一个用于输出十进制等效值的窗口,以及5个排成一行用于输出二进制数的窗口。每个十六进制数字的二进制等价物必须排列在一个数组中,十六进制数可能是数组的第二维,并且必须使用“常用算法”计算十进制数。我已经看过了一些例子和教程,我想到的是一个华氏到摄氏的转换器。到目前为止,我掌握的代码是: pack

我试图写一个程序,将十六进制转换成二进制,再转换成十进制,并且可以转换成5位数的十六进制数。转换是一个完全不同的问题,现在我一直在组织GUI。接口的标准是它必须有:一个用于输入十六进制数的窗口(一个文本框),一个用于输出十进制等效值的窗口,以及5个排成一行用于输出二进制数的窗口。每个十六进制数字的二进制等价物必须排列在一个数组中,十六进制数可能是数组的第二维,并且必须使用“常用算法”计算十进制数。我已经看过了一些例子和教程,我想到的是一个华氏到摄氏的转换器。到目前为止,我掌握的代码是:

package finalConverter;

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

public class Converter extends JFrame {

    private JTextField textField;
    private JButton convert;
    private JLabel hexadecimal, binary, decimal; 

    public Converter() {
        setTitle("Converter");
        setSize(400,400);
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().add(new ConverterPanel());
    }

    protected class ConverterPanel extends JPanel{
        public ConverterPanel(){
            setLayout(new GridLayout(3,5));
            textField = new JTextField();
            convert = new JButton ("Convert");
            hexadecimal = new JLabel("Hexadecimal");
            binary = new JLabel ("Binary");
            decimal = new JLabel ("Decimal");
            add(hexadecimal);
            add(textField);
            add(convert);
            add(binary);
            add(decimal);
        }
    }
    protected class EventHandler implements ActionListener{
        public void actionPerformed(ActionEvent ev){
            if(ev.getSource() == convert){
                double result = ()
            }
        }
    }
    public static void main(String[] args) {
        new Converter().setVisible(true);
    }
}
当我运行它时,它会给我一个有两列和三行的窗口。这不是我想要的,在newGridLayout中修补数字似乎并没有改变任何事情。我是否应该使用一些不同的布局来获得我想要的结果?还是因为我缺少文本字段和它输出二进制数的区域?
我试着用pack();在转换器窗口中:它只返回了一个较小的两列三行GUI。

您需要使用一个布局管理器,它为您提供了更大的灵活性

<> >,即<代码> GridBagLayout <代码>,您也可以考虑<代码> MigStays或JooDoo>代码>窗体布局< /代码>。< /P>
public class TestConverter {

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

    public TestConverter() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new ConverterPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class ConverterPane extends JPanel {

        private JTextField textField;
        private JButton convert;
        private JLabel[] binary;
        private JLabel decimal;

        public ConverterPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.insets = new Insets(2, 2, 2, 2);
            gbc.anchor = GridBagConstraints.WEST;

            add(new JLabel("Hexadecimal"), gbc);
            gbc.gridy++;
            add(new JLabel("Decimal"), gbc);
            gbc.gridy++;
            add(new JLabel("Binary"), gbc);

            gbc.gridx++;
            gbc.gridy = 0;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.gridwidth = 5;

            textField = new JTextField();
            textField.setHorizontalAlignment(JTextField.RIGHT);
            decimal = new JLabel("0");
            decimal.setHorizontalAlignment(JLabel.RIGHT);
            binary = new JLabel[]{
                new JLabel("00000000"),
                new JLabel("00000000"),
                new JLabel("00000000"),
                new JLabel("00000000"),
                new JLabel("00000000")
            };

            add(textField, gbc);
            gbc.gridy++;
            add(decimal, gbc);
            gbc.gridy++;
            gbc.fill = GridBagConstraints.NONE;
            gbc.gridwidth = 1;
            for (JLabel label : binary) {
                add(label, gbc);
                gbc.gridx++;
            }

            convert = new JButton("Convert");
            gbc.gridy++;
            gbc.gridx = 0;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.anchor = GridBagConstraints.CENTER;
            add(convert, gbc);
        }
    }
}

确保
pack()
Converter
窗口中。+1二进制表示让我想起Mac OS
Calculator>View>Programmer
,其中各个位是切换按钮。另见此。