我有六个 JTextField 供用户输入数字。只能通过单击带有所需数字的按钮来输入数字(数字为 1 - 49)。
我正在尝试设计它,以便如果一个文本字段中已经有数字,则输入的下一个数字将放置在下一个可用的文本字段中,并且如果所有文本字段中都有数字,那么如果用户尝试,则会出现一条警告消息输入第七个数字。
下面的代码是我玩了几个小时后得到的,但它仍然没有达到我想要的效果:
boolean clicked = true;
public void button()
{
try
{
if(clicked)
{
btn1.setEnabled(false);
if(" ".equals(txtSubOne.toString()))
{
txtSubOne.setText("1");
}
else if(!" ".equals(txtSubOne.toString()))
{
txtSubTwo.setText("1");
}
else if(txtSubThree == null)
{
txtSubThree.setText("1");
}
else if(txtSubFour == null)
{
txtSubFour.setText("1");
}
else if(txtSubFive == null)
{
txtSubFive.setText("1");
}
}
}
catch(Exception e)
{
printStackTrace();
}
最佳答案
创建一个面板来保存要在框架上显示的文本字段。创建一个列表来包含文本字段,以便您知道应该更新哪个文本字段。
使用循环创建 JTextField 并将其添加到面板和列表中。
为每个按钮创建一个 ActionListener toad。 ActionListener 将获取列表中的第一个文本字段,并将按钮中的文本添加到文本字段。然后它会从列表中删除文本字段,这样您就不会再次向其中添加文本。
创建按钮面板。然后创建一个循环来创建按钮,并将 ActionListener 添加到每个按钮并将按钮添加到面板。
类似于:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.border.*;
public class SSCCE extends JPanel
{
private List<JTextField> textFields = new ArrayList<JTextField>();
public SSCCE()
{
setLayout( new BorderLayout() );
JPanel textFieldPanel = new JPanel();
for (int i = 0; i < 7; i++)
{
JTextField tf = new JTextField(2);
tf.setEditable( false );
textFieldPanel.add( tf );
textFields.add( tf );
}
ActionListener al = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (textFields.size() == 0)
{
System.out.println("Text Fields are full");
return;
}
JTextField tf = textFields.remove(0);
JButton button = (JButton)e.getSource();
String text = e.getActionCommand();
tf.setText( text );
}
};
JPanel buttonPanel = new JPanel( new GridLayout(0, 7) );
for (int i = 0; i < 14; i++)
{
JButton button = new JButton("" + i);
button.addActionListener( al );
buttonPanel.add( button );
}
add(textFieldPanel, BorderLayout.PAGE_START);
add(buttonPanel, BorderLayout.CENTER);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new SSCCE());
frame.setLocationByPlatform( true );
frame.pack();
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
关于java - 如果前一个 JTextField 中已有数字,如何将从 JButton 输入的数字放入下一个 JTextfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33618694/