java - 数字键盘显示不正确

标签 java swing user-interface layout-manager grid-layout

我有一个 Java GUI 项目,我正在其中创建一个 ATM。我已设置好所有内容,但出于某种原因,我左侧的数字键盘显示不正确。它应该显示为一个 4x3 的数字网格,但它只显示一个 9。我已经检查以确保它在 GridLayout 中并且我已经检查了我的循环,但我可能已经查看了一些东西。感谢任何帮助,谢谢!

import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.*;

public class ATMProject extends JPanel implements ActionListener {
    private JPanel mainPanel = null;
    private JPanel btnPanel = null;
    private JPanel userBtns = null;
    private JTextArea textArea = null;
    private JPanel keyPanel = null;
    private JTextField numField = null;
    private JPanel numpadPanel = null;
    private JButton[] userButtons = null;
    private JButton[] keypadButtons = null;
    private String[] btnPanelbtns = { "A", "B", "C" };
    private String[] numpadPanelbtns = { "7", "4", "1", "8", "5", "2", "9", "6", "3", "0", ".", "CE" };

    public ATMProject() {
        super();
        mainPanel = new JPanel();
        this.setLayout(new BorderLayout());
        this.add(mainPanel);

        btnPanel = new JPanel();
        btnPanel.setLayout(new GridLayout(3, 1));
        this.add(btnPanel, BorderLayout.EAST);

        textArea = new JTextArea();
        this.add(textArea, BorderLayout.CENTER);

        keyPanel = new JPanel();
        keyPanel.setLayout(new BorderLayout());
        this.add(keyPanel, BorderLayout.WEST);

        numpadPanel = new JPanel();
        numpadPanel.setLayout(new GridLayout(0, 3));
        keyPanel.add(numpadPanel, BorderLayout.CENTER);

        numField = new JTextField();
        keyPanel.add(numField, BorderLayout.NORTH);

        userButtons = new JButton[btnPanelbtns.length];
        for (int i = 0; i < userButtons.length; i++) {
            userButtons[i] = new JButton(btnPanelbtns[i]);
            userButtons[i].addActionListener(this);
            btnPanel.add(userButtons[i]);
        }

        keypadButtons = new JButton[numpadPanelbtns.length];
        for (int i = 0; i < userButtons.length; i++) {
            keypadButtons[i] = new JButton(numpadPanelbtns[i]);
            keypadButtons[i].addActionListener(this);
            numpadPanel.add(keypadButtons[i]);
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }

    public static void main(String[] args) {
        MyFrame mf = new MyFrame();
    }

}


import javax.swing.JFrame;

public class MyFrame extends JFrame {
    private ATMProject atm = null;
    public MyFrame(){
        super();
        atm = new ATMProject();
        this.add(atm);
        this.setTitle("ATM");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setSize(800,300);
        this.setVisible(true);
    }
}

它应该是这样显示的:

enter image description here

最佳答案

您正在将按钮添加到 keyPanel...

keyPanel.add(keypadButtons[i]);

正在使用 BorderLayout...

keyPanel = new JPanel();
keyPanel.setLayout(new BorderLayout());

因此只有最后添加的组件才会被面板布局。

有人认为您应该将它们添加到 numpadPanel 而不是...

numpadPanel.add(keypadButtons[i]);

Yeah, I have that numpadPanel.add(keypadButtons[i]); and I am getting just 7 8 9 vertically.

这就是 GridLayout 的工作方式,您可以使用类似的东西强制进入水平优先模式

numpadPanel.setLayout(new GridLayout(0, 3));

KeyPad

关于java - 数字键盘显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439281/

相关文章:

java - 如何使用旧版本的 java 1.6 运行 .jar 1.7 程序?

java - 使用 JFrame 时组件不显示

java - 使用 Handler 在 EDT 和其他 Java 线程之间传递信息

java - 为什么我看不到用这个 ShadowRenderer 生成的阴影?

Java Swing - 如何暂停方法并等待按键?

java - JFace 向导传递变量

java - 如何让eclipse+maven查找和使用servlet api源码或javadoc

user-interface - 欧拉角与四元数 - 由内部存储和向用户呈现之间的紧张引起的问题?

java - 不完整的类型 :<anonymous ActionListener>cannot be converted to component

java - 哪些字符串替换 Java API(模板库)可用于进行条件和自定义字符串替换?