我的问题是当我按下清除按钮时,它只是清除文本字段而不是之前按下的数字的数据
Posted
技术标签:
【中文标题】我的问题是当我按下清除按钮时,它只是清除文本字段而不是之前按下的数字的数据【英文标题】:My problem is when I press the clear button, it just clears the textfield and not data of the previous numbers pressed 【发布时间】:2021-12-06 14:17:46 【问题描述】:这里的任务是制作一个类似于 pincode 进程的 Java 程序。我只是在清除过程中遇到问题,因为当我按下清除按钮时,它实际上会清除文本字段,但是当我按下新数字时,即使在按下清除后我之前输入的数字仍然会显示出来
enter code here
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
public class Pincode extends JPanel implements ActionListener
JLabel display, displayExtra;
JButton numButton;
JButton clr;
JButton etr;
String displayContent = "";
String[] numPadContent = "1", "2", "3", "4", "5", "6", "7", "8", "9", "CLEAR", "0", "ENTER";
ArrayList<JButton> buttonList;
String PASSWORD = "061904";
Pincode(Container pane)
pane.setPreferredSize(new Dimension(320, 335));
display = new JLabel(displayContent);
displayExtra = new JLabel(displayContent);
display.setPreferredSize(new Dimension(320, 25));
display.setBorder(BorderFactory.createLoweredBevelBorder());
pane.add(display, BorderLayout.PAGE_START);
buttonList = new ArrayList<JButton>(12);
JPanel numberPanel = new JPanel();
numberPanel.setLayout(new GridLayout(4, 3, 0, 0));
numberPanel.setPreferredSize(new Dimension(320, 260));
for (int i = 0; i < numPadContent.length; i++)
numButton = new JButton(numPadContent[i]);
buttonList.add(numButton);
for (int n = 0; n < buttonList.size(); n++)
buttonList.get(n).addActionListener(this);
numberPanel.add(buttonList.get(n));
pane.add(numberPanel, BorderLayout.LINE_END);
clr = new JButton("Clear");
clr.setPreferredSize(new Dimension(160, 30));
clr.addActionListener(this);
etr = new JButton("Enter");
etr.setPreferredSize(new Dimension(160, 30));
etr.addActionListener(this);
pane.add(clr);
pane.add(etr);
public void Authorized()
JOptionPane.showMessageDialog(null,"You are authorized");
public void Unauthorized()
JOptionPane.showMessageDialog(null,"You are not authorized!!!");
public void actionPerformed(ActionEvent e)
String textThere = display.getText(), textThereExtra = displayExtra.getText();
String additionalText = "";
for (int a = 0; a < buttonList.size(); a++)
if (e.getSource().equals(buttonList.get(a)) && a!=11 && a!=9)
additionalText = buttonList.get(a).getText();
int flag = 0;
if (e.getSource().equals(buttonList.get(9)))
textThere = "";
textThereExtra = "";
flag = 1;
if(flag != 1)
display.setText(textThere.concat("*"));
displayExtra.setText(textThereExtra.concat(additionalText));
else
display.setText(textThere);
if (e.getSource().equals(buttonList.get(11)))
System.out.println(textThereExtra);
System.out.println(textThere);
if(textThereExtra.equals(PASSWORD))
Authorized();
else
Unauthorized();
public static void main(String[] args)
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Pincode(frame));
frame.pack();
frame.setVisible(true);
请帮助我编写代码。非常感谢!
【问题讨论】:
我现在的问题是如何在文本字段上显示确切的星号数量,而不是添加额外的星号?因为每当我按下回车按钮时,它都会在文本字段上添加另一个星号。 【参考方案1】:您只是忘记更新 displayExtra 的 JLabel 文本。
只需在 else 块中添加 displayExtra.setText(textThereExtra);
即可询问 if flag != 1 就可以了!
【讨论】:
我现在的问题是如何在文本字段上显示确切的星号数量,而不是添加额外的星号?因为每当我按下回车按钮时,它都会在文本字段上添加另一个星号。 "我现在的问题" 原来的问题是 "..当我按下清除按钮时,它只是清除文本字段而不是之前按下的数字的数据" 这个答案似乎已经解决了。如果您有新问题,请启动一个新线程来提问。与此同时,我即将回滚最后一次编辑。请单击左侧的小勾号接受此答案。 我已经这样做了,我要为我的问题再发一个帖子吗?以上是关于我的问题是当我按下清除按钮时,它只是清除文本字段而不是之前按下的数字的数据的主要内容,如果未能解决你的问题,请参考以下文章