java-如何在不触发侦听器的情况下从PropertyChangeListener更改JOptionPane的值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何在不触发侦听器的情况下从PropertyChangeListener更改JOptionPane的值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2314字,纯文字阅读大概需要4分钟。
内容图文
我正在尝试制作一个程序来管理一组体育运动员.每个球员都有一个枚举Sport,SportManager具有便捷的工厂方法.我想做的是打开一个对话框,该对话框具有一个名称的JTextField和一个选择运动的组合框.但是,我想阻止用户在文本字段为空白时关闭对话框,因此我编写了一个PropertyChangeListener,以便在文本字段为空白时会发出哔哔声以告知用户.但是,如果用户在发出哔声后在文本中添加了某些内容,则它不会触发侦听器,并且您不能在不按Cancel的情况下关闭对话框,因为该值已经是JOptionPane.OK_OPTION,而cancel是唯一的方法更改JOptionPane.VALUE_PROPERTY.所以我尝试添加
message.setValue(JOptionPane.UNITIALIZED_VALUE);
在听众内.但是,这只是立即关闭了窗口,而没有给用户提供填充文本字段的机会,大概是因为它触发了我刚刚注册的侦听器.我如何使它发出不止一次的哔哔声并为用户提供填写该字段的机会?
FYI newPlayer是我要向其注册操作的组件.
码:
newPlayer.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Object[] msg = new Object [4];
msg[0] = new JLabel("Name:");
final JTextField nameField = new JTextField();
msg[1]=nameField;
msg[2] = new JLabel("Sport: ");
JComboBox<Sport> major = new JComboBox<Sport>(SportManager.getAllSports());
msg[3]=major;
final JOptionPane message = new JOptionPane();
message.setMessage(msg);
message.setMessageType(JOptionPane.PLAIN_MESSAGE);
message.setOptionType(JOptionPane.OK_CANCEL_OPTION);
final JDialog query = new JDialog(gui,"Create a new player",true);
query.setContentPane(message);
query.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
message.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (query.isVisible()&& (e.getSource() == message)&& (prop.equals(JOptionPane.VALUE_PROPERTY))) {
if(nameField.getText().equals("")&&message.getValue().equals(JOptionPane.OK_OPTION)){
Toolkit.getDefaultToolkit().beep();
message.setValue(JOptionPane.UNINITIALIZED_VALUE);
return;
}
query.dispose();
}
}
});
query.pack();
query.setVisible(true);
if(Integer.parseInt(message.getValue().toString())==JOptionPane.OK_OPTION){
players.add(new Player(nameField.getText(),(Sport)major.getSelectedItem()));
edited=true;
}
gui.show(players);
}
});
解决方法:
我认为您无法使用JOptionPane做到这一点,但可以使用TaskDialog框架和其他一些工具.
您也可以自己创建一个对话框,将更改侦听器附加到您的字段,然后根据字段的内容启用/禁用“确定”按钮.此过程通常称为“表单验证”
内容总结
以上是互联网集市为您收集整理的java-如何在不触发侦听器的情况下从PropertyChangeListener更改JOptionPane的值?全部内容,希望文章能够帮你解决java-如何在不触发侦听器的情况下从PropertyChangeListener更改JOptionPane的值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。