【问题标题】:Getting values from dynamically created JTextFields从动态创建的 JTextField 中获取值
【发布时间】:2014-04-18 13:56:05
【问题描述】:

请告诉我为什么我无法按照我设置的方式从“JTextFields”中获取文本值。

我根据歌曲数量创建了“JTextFields”,但如果我尝试从这些字段中获取文本,结果总是空白?

JTextField[] digiProdDetailBx = new JTextField[p.getAlbum().getSongList().size()];
    JTextField[] digiProdDetailBx2 = new JTextField[p.getAlbum().getSongList().size()];
    JLabel[] digiProdDetailLb = new JLabel[p.getAlbum().getSongList().size()];


    for (int i = 0; i < p.getAlbum().getSongList().size(); i++) {

        int num = i +1;

        if (i == 0) {
            gc.gridx = 0;
            gc.gridy = 0;
            gc.anchor = GridBagConstraints.WEST;
            songs.add(songNumber, gc);
        }

        gc.gridx = 0;
        gc.gridy = i + 1;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.weighty = 0.0;
        gc.weightx = 2.0;
        gc.anchor = GridBagConstraints.WEST;
        digiProdDetailLb[i] = new JLabel(" " + num);
        digiProdDetailLb[i].setFont(font);
        songs.add(digiProdDetailLb[i], gc);

        if (i == 0) {
            gc.gridx = 1;
            gc.gridy = 0;
            songs.add(songName, gc);
        }
        gc.gridx = 1;
        gc.gridy = i + 1;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.weighty = 0.0;
        gc.weightx = 2.0;
        gc.gridwidth = 2;
        digiProdDetailBx[i] = new JTextField(p.getAlbum().getSongList().get(i).getSong_name());
        digiProdDetailBx[i].setPreferredSize(new Dimension(250, 20));
        songs.add(digiProdDetailBx[i], gc);

        if (i == 0) {
            gc.gridx = 3;
            gc.gridy = 0;
            songs.add(songLength, gc);
        }
        gc.gridx = 3;
        gc.gridy = i + 1;
        gc.gridwidth = 1;
        gc.gridheight = 1;
        gc.weighty = 0.0;
        gc.weightx = 2.0;
        gc.gridwidth = 2;
        digiProdDetailBx2[i] = new JTextField(p.getAlbum().getSongList().get(i).getSong_length());
        digiProdDetailBx2[i].setPreferredSize(new Dimension(50, 20));
        songs.add(digiProdDetailBx2[i], gc);

    }
    ;

    this.add(songs, BorderLayout.EAST);


for(int i = 0 ; i < p.getAlbum().getSongList().size(); i++)
        {

            Song s = new Song(p.getProd_id(),p.getAlbum().getSongList().get(i).getProd_id(), 
                    digiProdDetailBx[i].getText(), digiProdDetailBx2[i].getText());
            alist.add(s);
        }


        for(int i = 0 ; i < alist.size(); i++)
        {
        System.out.println(digiProdDetailBx[i].getName());
        }

我假设我创建 JTextFields 的方式是问题所在,那么是否可以按照我的方式创建它们并且仍然能够从中获取值?

【问题讨论】:

  • 我想出了一个解决方法,方法是添加一组命名的 JTextFields,这是唯一/最好的方法吗?
  • 您的p.getAlbum().getSongList().get(i).getSong_name() 是否返回正确的非空白值?此外,您应该遵守命名约定 (getSongName())。
  • 是的,我现在可以使用它了,命名约定有点混乱我开始使用表中的名称作为变量名,我会在下一个项目中更加小心。

标签: java swing jtextfield gettext


【解决方案1】:

不应该是:

for(int i = 0 ; i < alist.size(); i++)
{
    System.out.println(digiProdDetailBx[i].getText());
}

您使用的构造函数设置文本而不是名称,getName() 返回对象的名称,而不是值。

顺便说一句,使用列表而不是数组通常更舒服,并且给它们起比 somethingBX、somethingBX2 等更有意义的名称。

【讨论】:

  • 是的,很抱歉,我在上传代码之前正在测试一些东西,却忘了改回来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
  • 1970-01-01
相关资源
最近更新 更多