Java 如何查找匿名jtextfield的文本
因此,我正在制作一个带有gui的商店系统。我有一个菜单项,当我按下它时,会打开另一个jframe来输入jtextfield中出售的每个项目的编号,如下所示:Java 如何查找匿名jtextfield的文本,java,swing,actionlistener,Java,Swing,Actionlistener,因此,我正在制作一个带有gui的商店系统。我有一个菜单项,当我按下它时,会打开另一个jframe来输入jtextfield中出售的每个项目的编号,如下所示: public void actionPerformed(ActionEvent e) { JPanel panel = (JPanel)((JButton) e.getSource()).getParent().getParent(); Component[] componen
public void actionPerformed(ActionEvent e) {
JPanel panel = (JPanel)((JButton) e.getSource()).getParent().getParent();
Component[] components = panel.getComponents();
for (Component c : components) {
if (c instanceof ProductPanel) {
((ProductPanel)c).setNewQty();
}
}
}
});
JPanel-salesPanel=newjpanel();
设置尺寸(新尺寸(520270));
可设置大小(假);
设定位置(200200);
标题=新的JLabel(“填写售出的产品数量”);
salesPanel.setSize(新尺寸(230,30*sw.getProductList().size());
setLayout(新的GridLayout(sw.getProductList().size()+1,3));
...
sw.getProductList().forEach(n->{
添加(新的JLabel(Integer.toString(n.getProductID())+“:”));
添加(新的JLabel(Integer.toString(n.getQuantity()));
添加(新的JLabel(n.getName());
添加(新的JTextField());
});
这就是它的样子
请注意,sw
是主类的对象,该类具有包含每个产品信息的product类型的ArrayList
有没有办法从这些JTextField
s中发送文本?如果不是的话,我还有什么办法可以做到这一点
编辑:
在主ShopWindow类中,我有一个ArrayList
private ArrayList<Product> productList = new ArrayList<Product>();
这是一个模拟解决方案(仅用于显示如何使用操作侦听器更新数量标签和清除字段)
此模拟解决方案的要点:
JPanel
封装产品线项目。这将使您在需要删除和/或添加产品行时更加容易ProductPanel
,而不是单独对每个面板进行硬编码。应该是这样的:
public void actionPerformed(ActionEvent e) {
JPanel panel = (JPanel)((JButton) e.getSource()).getParent().getParent();
Component[] components = panel.getComponents();
for (Component c : components) {
if (c instanceof ProductPanel) {
((ProductPanel)c).setNewQty();
}
}
}
});
显然,您的解决方案将取决于您决定如何将组件封装在容器中。对于此模拟,产品面板位于框架面板内,框架面板包含放置按钮的面板。因此,我需要为update和cancel按钮获取“祖父母”容器,以利用调用适当的方法以更动态的方式进行更新和清除
最后,您可能想做一些更优雅的事情来创建产品面板。例如,您可能希望添加一些工厂方法来创建产品面板,而不是像我的模拟解决方案那样使用硬编码的产品面板。不管怎样,我想我展示了你想要的解决方案
更新:如果您不遵循Andrew Thompson不使用文本字段作为数值的建议,面板的
GetNewQuantity
方法将需要验证获取的文本,以确保其包含有效的数值(这是他的观点)。我强烈建议你听从他的建议。为什么不简单地创建一个包含适当字段和getter的类,包括JTextField字段和getter来获取文本?你似乎把事情复杂化了。另外,子窗口应该是一个JDialog,而不是一个JFrame,模态对话框,如果需要的话……好吧,我把它改成了JDialog,但是有什么区别呢?另外,我可以创建一个包含jtextfield的类,并将其添加到面板?,在获取文本时如何识别它们?抱歉,这是我的第一个大型java swing程序。1)不要使用文本字段作为数字!相反,将SpinnerNumberModel
实例声明为类的属性(可能作为数组或数组列表),并在微调器中显示这些数字模型(aJSpinner
)。这使得用户很容易,代码也很容易,因为不需要进行“数字验证”。查找数字时,只需调用numberModel.getNumber().getInteger()
。2) 为了更快地获得更好的帮助,请添加或。从两个项目开始。如果你能为2解决这个问题,剩下的应该很简单。3)请看(是的)(以防万一……)4)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。请改用布局管理器,或与布局填充和边框一起使用。@hfontanez我的声誉不足15,无法提升对不起……您还应该遵循Andrew Thompson的建议,不要对数字字段使用JTextField
。
public void actionPerformed(ActionEvent e) {
JPanel panel = (JPanel)((JButton) e.getSource()).getParent().getParent();
Component[] components = panel.getComponents();
for (Component c : components) {
if (c instanceof ProductPanel) {
((ProductPanel)c).setNewQty();
}
}
}
});