我有一个 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);
}
}
它应该是这样显示的:
最佳答案
您正在将按钮添加到 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));
关于java - 数字键盘显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439281/