java - 如果前一个 JTextField 中已有数字,如何将从 JButton 输入的数字放入下一个 JTextfield

标签 java swing netbeans

我有六个 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();
        }

最佳答案

  1. 创建一个面板来保存要在框架上显示的文本字段。创建一个列表来包含文本字段,以便您知道应该更新哪个文本字段。

  2. 使用循环创建 JTextField 并将其添加到面板和列表中。

  3. 为每个按钮创建一个 ActionListener toad。 ActionListener 将获取列表中的第一个文本字段,并将按钮中的文本添加到文本字段。然后它会从列表中删除文本字段,这样您就不会再次向其中添加文本。

  4. 创建按钮面板。然后创建一个循环来创建按钮,并将 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/

相关文章:

java - 为什么我必须输入字母才能连接服务器

java - 写入资源路径中的文件时出现 NullPointerException

Java-Swing : Change getSource() in ActionListener

java - 变量 [x] 已在方法 [y] 中定义 - 但范围不同

java - Netbeans - 应用程序重新启动

java - Eclipse Che 不启动 : 'java.lang.ClassNotFoundException org.apache.juli.ClassLoaderLogManager'

java - 如何读取堆大小——占用和空闲?

java - 在迭代时更新 PriorityQueue

java - 从 GridBagLayout 中的特定坐标获取组件

netbeans - Netbeans 中的自动换行注释