Java 从动态创建的JTextFields获取值
请告诉我为什么我无法通过设置“JTextFields”来获取文本值 我根据歌曲的数量创建了“JTextFields”,但是如果我试图从这些字段中获取文本,结果总是空白的Java 从动态创建的JTextFields获取值,java,swing,jtextfield,gettext,Java,Swing,Jtextfield,Gettext,请告诉我为什么我无法通过设置“JTextFields”来获取文本值 我根据歌曲的数量创建了“JTextFields”,但是如果我试图从这些字段中获取文本,结果总是空白的 JTextField[] digiProdDetailBx = new JTextField[p.getAlbum().getSongList().size()]; JTextField[] digiProdDetailBx2 = new JTextField[p.getAlbum().getSongList().siz
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());
}
JTextField[]digiProdDetailBx=新的JTextField[p.getAlbum().getSongList().size()];
JTextField[]digiProdDetailBx2=新的JTextField[p.getAlbum().getSongList().size()];
JLabel[]digiProdDetailLb=新JLabel[p.getAlbum().getSongList().size()];
对于(int i=0;i
我假设我创建JTextFields的方式是问题所在,那么是否有可能以我以前的方式创建它们,并且仍然能够从中获取值呢?应该是:
for(int i = 0 ; i < alist.size(); i++)
{
System.out.println(digiProdDetailBx[i].getText());
}
for(int i=0;i
您正在使用的构造函数设置文本而不是名称,getName()
返回对象的名称,而不是值
顺便说一句,通常使用列表比使用数组更舒服,并且给它们提供比somethingBX、somethingBX2等更有意义的名称。我通过添加一个命名JTextFields数组找到了解决办法,这是唯一/最好的方法吗?你的
p.getAlbum().getSongList().get(I).getSong_name()
是否正确返回,非空白值?另外,您应该坚持命名约定(getSongName())。是的,我现在正在使用它,命名约定有点混乱。我开始使用表中的名称作为变量名,我将在下一个项目中更加小心。是的,很抱歉,我在上载代码之前测试了一些内容,但忘了将其更改回来。