-2

16進数から2進数、10進数に変換し、最大5桁の16進数に変換できるプログラムを作成しようとしています。変換はまったく別の問題です。今はGUIの整理にこだわっています。インターフェイスの基準は、16進数を入力するための1つのウィンドウ(テキストボックス)、10進数に相当するものを出力するための1つのウィンドウ、および2進数を出力するために一列に配置された5つのウィンドウである必要があります。各16進数に相当する2進数は配列に配置する必要があり、16進数は配列の2次元である可能性があり、10進数は「通常のアルゴリズム」を使用して計算する必要があります。私は例とチュートリアルを見てきましたが、私が思いついたのは華氏から摂氏へのコンバーターに基づいています。私がこれまでに持っているコードは次のとおりです。

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);
    }
}

これを実行すると、2列3行のウィンドウが表示されます。それは私が望んでいたことではなく、newGridLayoutの数値をいじくり回しても何も変わらないようです。希望する結果を得るために使用する必要のある別のレイアウトはありますか?それとも、テキストフィールドと2進数を出力する領域が欠落しているためですか?pack();を使用してみました。コンバーターウィンドウ内:2列×3行の小さいGUIが返されました。

4

1 に答える 1

1

より柔軟なレイアウト マネージャーを使用する必要があります...

ここに画像の説明を入力

ですので、JGoodiesGridBagLayoutも検討することをお勧めします。MigLayoutFormLayout

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);
        }
    }
}
于 2012-12-17T02:23:11.227 に答える