嗯,我已经在互联网上找遍了,就是找不到这个问题的答案,所以也许有人可以提供一些见解。
我正在开发一个相对简单的Java应用程序,它将取代目前用于系统访问请求的Word文档。它旨在允许表单输入新员工的招聘信息-姓名、所需的访问权限等。
所以这就是我的问题。尝试制作一个包含所有文本字段和所有内容的GUI是令人惊讶的痛苦。因为每个小部件都有一点不同,在填写表单后获取输入似乎需要每个小部件有一个单独的引用,以便我可以单独调用它们。这意味着一个部分的每个面板都有6-10个不同的私有字段。(我尝试将所有类似的小部件添加到列表中,并在循环中调用它们,但似乎不起作用。)
似乎web表单在某些方面更适合这样做,但我没有可用的基础设施来做到这一点。对于类似的东西,有没有人找到比这个更好的解决方案?它看起来就像是一大堆代码。请看下面的想法(我放了一些注释,而不是实际的代码,因为它太长了)。感谢您的关注!
private JComboBox my_dates;
private JTextField my_date1;
private JTextField my_date2;
private JTextField my_request_date;
private JTextField my_new_legal_name;
private JTextField my_new_pref_name;
private JTextField my_new_username;
private JTextField my_prev_legal_name;
private JTextField my_prev_pref_name;
private JTextField my_prev_username;
private JTextField my_emp_id;
private JTextField my_manager;
private JTextField my_auth_requestor;
private JTextField my_auth_phone;
public NameChangePanel(FormSection the_section)
{
super();
initialize();
buildPanel(the_section.getFields());
}
private void initialize()
{
// Create all the widgets individuall
}
private void buildPanel(List the_fields)
{
// add a field label
// add a component
// repeat for all values
}
public List getFormValues()
{
// Call all of the private fields individually
return values;
}
}发布于 2009-05-05 08:41:13
普通的Swing是冗长的--没有任何参数。基本上,对于这类事情,我最终依赖于一堆自己开发的工具/工厂方法,比如createTextBox(),它是参数化的,用于通用,并将执行所需的3-8条语句。
我有时甚至会参数化布局。我倾向于将所有布局简化为GridBagLayout (其他人使用BorderLayout,等等;这只是个人喜好的问题),然后创建将控件放在网格中特定点的方法。
如果您不打算使用基于Web的应用程序,那么我将继续使用Swing。它可能很冗长,但对于一个简单的表单来说并不是那么困难。
发布于 2009-05-05 23:39:05
可以说我疯了,但我不喜欢gui构建器。我更喜欢手工编码带来的额外控制。此外,由于代码是您自己编写的,因此调试起来要容易得多。重要的是按照逻辑顺序布局代码,并使用有条不紊的变量名。
你提到过尝试使用列表。然而,我根本看不出这将如何为您节省很多时间(或者正如我前面所暗示的,您将在实现上节省的时间,您将在调试过程中损失)。我猜当你开始对JTextFields的输入进行健全检查时,问题就开始出现了。我建议将JTextField子类化为MoneyTextField、PhoneNumberTextField等,这些子类化可用于设置ActionListener,以阻止人们做愚蠢的事情。
发布于 2009-05-05 09:10:55
Netbeans有一个被大多数人认为相当不错的gui构建器。此屏幕显示展示了可能对您有帮助的数据绑定功能。
另一种选择可能是推出你自己的演示框架,这取决于你想要的复杂程度,并不是那么困难和有趣。只需使用反射将字段从对象中拉出,并将这些字段转换为窗口小部件,然后再转换回来。确保使用布局管理器为您完成大部分繁重的工作。
是的,总的来说,gui的东西不是java的强项,但你应该发现它已经足够好了。
https://stackoverflow.com/questions/823884
复制相似问题