我有一个JPanel全JTextField中的...的Java得到的JPanel组件
for (int i=0; i<maxPoints; i++) {
JTextField textField = new JTextField();
points.add(textField);
}
我怎么后来得到在JPanel中JTextField的?就像如果我想与
TextField.getText();
感谢
我有一个JPanel全JTextField中的...的Java得到的JPanel组件
for (int i=0; i<maxPoints; i++) {
JTextField textField = new JTextField();
points.add(textField);
}
我怎么后来得到在JPanel中JTextField的?就像如果我想与
TextField.getText();
感谢
那么记住他们并没有通过他们的自我那里(我想了解有关动态创建这些面板在运行时的一些问题)
在贴有答案,有人说你应该保持参照该等数组中的textfields。这正是你需要的东西在这里:
List<JTextField> list = new ArrayLists<JTextField>();
// your code...
for (int i=0; i<maxPoints; i++) {
JTextField textField = new JTextField();
points.add(textField);
list.add(textField); // keep a reference to those fields.
}
//后来
for(JTextField f : list) {
System.out.println(f.getText()) ;
}
这不是很简单?
只要记住保持这些类型的工件(列表)尽可能私人。它们仅供您控制,我不认为它们属于界面。
比方说,你想要得到文本的阵列,而不是
public List<JTextField> getFields();
你应该考虑:
public List<String> getTexts(); // get them from the textfields ...
它们的值每的JPanel Java中也是一个AWT容器。因此,您应该可以使用getComponents获取面板中包含的组件的数组,并遍历它们,检查它们的类型(以确保您没有获得其他控件),并根据需要随意使用它们。
但是,这通常是糟糕的设计。如果您知道需要访问特定的组件,最好将这些文本字段的数组保留并传递给它,尽管它们可视化地包含在容器中。
如果这是一个经常性的任务,或者可以从多个角度来完成,甚至可以有一个特殊的类代表一个带有文本字段的面板,然后通过其接口访问这些字段。
//una forma de recorer todos los elementos dentro de un jpanel
Component[] components = jPanelX.getComponents();
for (int i = 0; i < components.length; i++) {
if(components[i].getClass().getName().toString().equals("javax.swing.JTextField")){
components[i].setEnabled(false);
}
}
是否可以使用其声明的名称获取该组件?我的意思是组件的变量名称 – Barrier 2015-12-02 04:25:05
你应该调用getComponents方法此方法返回的数组您的JPanel上的所有元素。在你可以在数组上迭代并检查它是否等于被追踪的组件。
List<JTextField> list = new ArrayLists<JTextField>();
Component[] components = panel.getComponents();
for (Component component : components) {
if (component.getClass().equals(JTextField.class)) {
list.add((JTextField)component);
}
}
是否可以使用其声明的名称获取此组件?我的意思是组件的变量名称。 – Barrier 2015-12-02 04:23:14
你的问题是写繁琐的代码文本。为什么不生成它并粘贴到程序中... ...
for(int i=1 ; i<=maxpoints ;i++){
System.out.println("JTextField tf"+i+" = new JTextField()"+";");
System.out.println("points.add(tf"+i+")"+";");
}
将上述代码的输出粘贴到程序中,就完成了。 现在,进入文本字段,你可以产生类似的方式繁琐的代码文本内容....
for(int i=1 ; i<=maxpoints ;i++){
System.out.println("String s"+i+" = JTextField tf"+i+".getText()"+";");
}
这是我做的递归经过容器和获取是在文本框JPanels。
private void ClearAllFields(Container myContainer) {
Component myComps[] = myContainer.getComponents();
for (int i=0; i<myComps.length; i++) {
if(myComps[i] instanceof JPanel) {
JPanel myPanel = (JPanel) myComps[i];
ClearAllFields(myPanel);
}
if(myComps[i] instanceof JTextField) {
JTextField myTextField = (JTextField) myComps[i];
myTextField.setText("");
}
}
}
然后使用它,你怎么称呼它这样
ClearAllFields([jdialog or jframe etc].getContentPane());
我不得不说,谢谢“没人”为消除这些苹果标志和“THANKSSS”搁笔。 – 2008-12-16 02:35:03