Java 在循环中动态创建JTextField

Java 在循环中动态创建JTextField,java,swing,user-interface,jtextfield,Java,Swing,User Interface,Jtextfield,我是JavaGUI的初学者。我正在写一个程序,计算给定矩阵的逆。要做到这一点,首先我必须扫描矩阵。我决定这样扫描矩阵: 首先,我询问用户方阵的行数或列数。当用户输入一个数字并单击Tamam按钮时,我想创建一个小NxNJTextField 因此,用户将能够轻松地输入矩阵的每个元素。我想问的是:我无法创建NxNJTextField。我的代码: private void jButtonRowCntMouseClicked(java.awt.event.MouseEvent evt) {

我是JavaGUI的初学者。我正在写一个程序,计算给定矩阵的逆。要做到这一点,首先我必须扫描矩阵。我决定这样扫描矩阵:

首先,我询问用户方阵的行数或列数。当用户输入一个数字并单击
Tamam
按钮时,我想创建一个小NxN
JTextField

因此,用户将能够轻松地输入矩阵的每个元素。我想问的是:我无法创建NxN
JTextField
。我的代码:

private void jButtonRowCntMouseClicked(java.awt.event.MouseEvent evt) {                                           
        int i,j;
        if(jTextFieldRowCnt.getText() != null){
            String cnt = jTextFieldRowCnt.getText();
            Integer rowCnt = Integer.parseInt(cnt);                      
            for(i=0;i<rowCnt;i++){
                for(j=0;j<rowCnt;j++){
                      JTextField textField = new JTextField();
                      this.add(textField);
                      pack();
                }
            }
        }
    } 
private void jButtonRowCntMouseClicked(java.awt.event.MouseEvent evt){
int i,j;
if(jTextFieldRowCnt.getText()!=null){
字符串cnt=jTextFieldRowCnt.getText();
整数rowCnt=Integer.parseInt(cnt);

对于(i=0;i什么是具体问题?对象的类是什么? 容器组件的布局似乎有问题

我建议您使用
GridLayout
将矩阵文本字段添加到专用的
JPanel

例如:

    // ...
    matrixPanel.setLayout(new GridLayout(rowCnt, rowCnt)); // matrixPanel is the dedicated JPanel
    for(i=0;i<rowCnt;i++){
        for(j=0;j<rowCnt;j++){
              JTextField textField = new JTextField();
              matrixPanel.add(textField); // add the fields into the panel
              //pack(); I think it wouldn't be needed
        }
    }
/。。。
setLayout(新的GridLayout(rowCnt,rowCnt));//matrixPanel是专用的JPanel
对于(i=0;i
import java.awt.Dimension;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.border.LineBorder;
公开课考试
{
//现场成员
静态JPanel面板=新JPanel();
静态整数索引器=1;
静态列表listOfTextFields=new ArrayList();
公共静态void main(字符串[]args)
{       
//构造框架
JFrame=新JFrame();
frame.setLayout(新的GridBagLayout());
frame.setPreferredSize(新尺寸(990990));
frame.setTitle(“我的示例”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//框架约束
GridBagConstraints frameConstraints=新的GridBagConstraints();
//构造按钮
JButton addButton=新JButton(“测试”);
addButton.addActionListener(newButtonListener());
//将按钮添加到框架
frameConstraints.gridx=0;
frameConstraints.gridy=0;
添加(addButton,frameConstraints);
//构造面板
面板。设置首选尺寸(新尺寸(600600));
panel.setLayout(新的GridBagLayout());
panel.setOrder(LineBorder.createBlackLineBorder());
//将面板添加到框架
frameConstraints.gridx=0;
frameConstraints.gridy=1;
frameConstraints.weighty=1;
添加(面板、框架约束);
//包装架
frame.pack();
//使框架可见
frame.setVisible(true);
}
静态类ButtonListener实现ActionListener
{
@凌驾
已执行的公共无效操作(操作事件arg0)
{       
panel.removeAll();
GridBagConstraints textFieldConstraints=新的GridBagConstraints();
int rowCnt=4,i,j;

为了(i=0;如果想要更快地获得帮助,请发布一个。这听起来更适合
JTable
。“This”是什么?使用了什么布局?@Gandalf rowCnt是您得到的参数。相应地设置它。我找到了一个类似的代码,并为您编辑了它。您太棒了,我会尝试这个
import java.awt.Dimension;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.LineBorder;

    public class Test 
    {
        // Field members
        static JPanel panel = new JPanel();
        static Integer indexer = 1;
        static List<JTextField> listOfTextFields = new ArrayList<JTextField>();

        public static void main(String[] args)
        {       
            // Construct frame
            JFrame frame = new JFrame();
            frame.setLayout(new GridBagLayout());
            frame.setPreferredSize(new Dimension(990, 990));
            frame.setTitle("My Example");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            // Frame constraints
            GridBagConstraints frameConstraints = new GridBagConstraints();

            // Construct button
            JButton addButton = new JButton("test");
            addButton.addActionListener(new ButtonListener());

            // Add button to frame
            frameConstraints.gridx = 0;
            frameConstraints.gridy = 0;
            frame.add(addButton, frameConstraints);

            // Construct panel
            panel.setPreferredSize(new Dimension(600, 600));
            panel.setLayout(new GridBagLayout());
            panel.setBorder(LineBorder.createBlackLineBorder());

            // Add panel to frame
            frameConstraints.gridx = 0;
            frameConstraints.gridy = 1;
            frameConstraints.weighty = 1;
            frame.add(panel, frameConstraints);

            // Pack frame
            frame.pack();

            // Make frame visible
            frame.setVisible(true);
        }

        static class ButtonListener implements ActionListener
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {       

                panel.removeAll();
                GridBagConstraints textFieldConstraints = new GridBagConstraints();

                int rowCnt=4,i,j;

                for(i=0;i<rowCnt;i++){
                    for(j=0;j<rowCnt;j++){
                        JTextField g=new JTextField();
                        g.setText("7");
                        textFieldConstraints.gridx = i;
                        textFieldConstraints.fill = GridBagConstraints.HORIZONTAL;
                        textFieldConstraints.weightx = 0.5;
                        textFieldConstraints.insets = new Insets(10, 10, 10, 10);
                        textFieldConstraints.gridy = j;
                        panel.add(g, textFieldConstraints);
                    }
                }

                panel.updateUI();
            }


        }
    }