| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package clienteditor; |
| |
| /** |
| * Form that allows editing of information about one client. |
| * |
| * @author Jiri Vagner, Jan Stola |
| */ |
| public class ClientEditor extends javax.swing.JPanel { |
| private Client client = Client.createTestClient(); |
| |
| public ClientEditor() { |
| initComponents(); |
| bindingGroup.addBindingListener(new LoggingBindingListener(validationMsgLabel)); |
| } |
| |
| /** |
| * Returns <code>Client</code> being edited. |
| * |
| * @return <code>Client</code> being edited. |
| */ |
| public Client getClient() { |
| return client; |
| } |
| |
| /** |
| * Sets client to edit. |
| * |
| * @param client client to edit. |
| */ |
| public void setClient(Client client) { |
| Client oldClient = this.client; |
| this.client = client; |
| firePropertyChange("client", oldClient, client); |
| } |
| |
| /** This method is called from within the constructor to |
| * initialize the form. |
| * WARNING: Do NOT modify this code. The content of this method is |
| * always regenerated by the Form Editor. |
| */ |
| // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents |
| private void initComponents() { |
| bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); |
| |
| sexButtonGroup = new javax.swing.ButtonGroup(); |
| ageConverter = new clienteditor.AgeConverter(); |
| ageValidator = new clienteditor.AgeValidator(); |
| maritalStatusConverter = new clienteditor.MaritalStatusConverter(); |
| requiredStringValidator = new clienteditor.RequiredStringValidator(); |
| emailValidator = new clienteditor.EmailValidator(); |
| clientInfoPane = new javax.swing.JTabbedPane(); |
| personalPanel = new javax.swing.JPanel(); |
| firstNameLabel = new javax.swing.JLabel(); |
| firstNameTextField = new javax.swing.JTextField(); |
| surnameLabel = new javax.swing.JLabel(); |
| surnameTextField = new javax.swing.JTextField(); |
| maritalComboBox = new javax.swing.JComboBox(); |
| sexLabel = new javax.swing.JLabel(); |
| maritalStatusLabel = new javax.swing.JLabel(); |
| maleRadioButton = new javax.swing.JRadioButton(); |
| femaleRadioButton = new javax.swing.JRadioButton(); |
| ageLabel = new javax.swing.JLabel(); |
| ageTextField = new javax.swing.JTextField(); |
| contactPanel = new javax.swing.JPanel(); |
| nicknameLabel = new javax.swing.JLabel(); |
| emailLabel = new javax.swing.JLabel(); |
| webLabel = new javax.swing.JLabel(); |
| imLabel = new javax.swing.JLabel(); |
| nicknameTextField = new javax.swing.JTextField(); |
| emailTextField = new javax.swing.JTextField(); |
| webTextField = new javax.swing.JTextField(); |
| imTextField = new javax.swing.JTextField(); |
| usernameLabel = new javax.swing.JLabel(); |
| clientInfoLabel = new javax.swing.JLabel(); |
| validationMsgLabel = new javax.swing.JLabel(); |
| |
| personalPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); |
| |
| firstNameLabel.setText("First Name:"); // NOI18N |
| |
| org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.firstName}"), firstNameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "firstName"); // NOI18N |
| bindingGroup.addBinding(binding); |
| |
| surnameLabel.setText("Surname:"); // NOI18N |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.surname}"), surnameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "surname"); // NOI18N |
| binding.setValidator(requiredStringValidator); |
| bindingGroup.addBinding(binding); |
| |
| maritalComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Single", "Married", "Separated", "Divorced" })); |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.maritalStatus}"), maritalComboBox, org.jdesktop.beansbinding.BeanProperty.create("selectedItem"), "maritalStatus"); // NOI18N |
| binding.setConverter(maritalStatusConverter); |
| bindingGroup.addBinding(binding); |
| |
| sexLabel.setText("Sex:"); // NOI18N |
| |
| maritalStatusLabel.setText("Marital status:"); // NOI18N |
| |
| sexButtonGroup.add(maleRadioButton); |
| maleRadioButton.setText("male"); // NOI18N |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.sex}"), maleRadioButton, org.jdesktop.beansbinding.BeanProperty.create("selected"), "sex"); // NOI18N |
| bindingGroup.addBinding(binding); |
| |
| sexButtonGroup.add(femaleRadioButton); |
| femaleRadioButton.setText("female"); // NOI18N |
| |
| ageLabel.setText("Age:"); // NOI18N |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.age}"), ageTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "age"); |
| binding.setConverter(ageConverter); |
| binding.setValidator(ageValidator); |
| bindingGroup.addBinding(binding); |
| |
| javax.swing.GroupLayout personalPanelLayout = new javax.swing.GroupLayout(personalPanel); |
| personalPanel.setLayout(personalPanelLayout); |
| personalPanelLayout.setHorizontalGroup( |
| personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(personalPanelLayout.createSequentialGroup() |
| .addContainerGap() |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addComponent(sexLabel) |
| .addGroup(personalPanelLayout.createSequentialGroup() |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addComponent(firstNameLabel) |
| .addComponent(surnameLabel) |
| .addComponent(maritalStatusLabel) |
| .addComponent(ageLabel)) |
| .addGap(7, 7, 7) |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(personalPanelLayout.createSequentialGroup() |
| .addComponent(maleRadioButton) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addComponent(femaleRadioButton)) |
| .addComponent(firstNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 265, Short.MAX_VALUE) |
| .addComponent(surnameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 265, Short.MAX_VALUE) |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) |
| .addComponent(ageTextField, javax.swing.GroupLayout.Alignment.LEADING) |
| .addComponent(maritalComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))) |
| .addContainerGap()) |
| ); |
| personalPanelLayout.setVerticalGroup( |
| personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(personalPanelLayout.createSequentialGroup() |
| .addContainerGap() |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(firstNameLabel) |
| .addComponent(firstNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(surnameLabel) |
| .addComponent(surnameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(maritalStatusLabel) |
| .addComponent(maritalComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(ageLabel) |
| .addComponent(ageTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(personalPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(sexLabel) |
| .addComponent(femaleRadioButton) |
| .addComponent(maleRadioButton)) |
| .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) |
| ); |
| |
| clientInfoPane.addTab("Personal", personalPanel); |
| |
| contactPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); |
| |
| nicknameLabel.setText("Nickname:"); // NOI18N |
| |
| emailLabel.setText("E-mail:"); // NOI18N |
| |
| webLabel.setText("Web:"); // NOI18N |
| |
| imLabel.setText("IM:"); // NOI18N |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.nickname}"), nicknameTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "nickname"); // NOI18N |
| bindingGroup.addBinding(binding); |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.email}"), emailTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "email"); |
| binding.setValidator(emailValidator); |
| bindingGroup.addBinding(binding); |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.web}"), webTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "web"); |
| bindingGroup.addBinding(binding); |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.im}"), imTextField, org.jdesktop.beansbinding.BeanProperty.create("text"), "im"); |
| bindingGroup.addBinding(binding); |
| |
| javax.swing.GroupLayout contactPanelLayout = new javax.swing.GroupLayout(contactPanel); |
| contactPanel.setLayout(contactPanelLayout); |
| contactPanelLayout.setHorizontalGroup( |
| contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(contactPanelLayout.createSequentialGroup() |
| .addContainerGap() |
| .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addComponent(nicknameLabel) |
| .addComponent(emailLabel) |
| .addComponent(webLabel) |
| .addComponent(imLabel)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addComponent(nicknameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE) |
| .addComponent(emailTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE) |
| .addComponent(webTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE) |
| .addComponent(imTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE)) |
| .addContainerGap()) |
| ); |
| contactPanelLayout.setVerticalGroup( |
| contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(contactPanelLayout.createSequentialGroup() |
| .addContainerGap() |
| .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(nicknameLabel) |
| .addComponent(nicknameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(emailLabel) |
| .addComponent(emailTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(webLabel) |
| .addComponent(webTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(imLabel) |
| .addComponent(imTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addContainerGap(34, Short.MAX_VALUE)) |
| ); |
| |
| clientInfoPane.addTab("Contact", contactPanel); |
| |
| usernameLabel.setFont(new java.awt.Font("Dialog", 1, 24)); // NOI18N |
| |
| binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${client.firstName} ${client.surname}"), usernameLabel, org.jdesktop.beansbinding.BeanProperty.create("text"), "displayNameTitle"); |
| bindingGroup.addBinding(binding); |
| |
| clientInfoLabel.setFont(new java.awt.Font("Dialog", 0, 24)); // NOI18N |
| clientInfoLabel.setText("Client Info:"); // NOI18N |
| |
| validationMsgLabel.setFont(new java.awt.Font("Dialog", 1, 11)); // NOI18N |
| validationMsgLabel.setForeground(new java.awt.Color(255, 0, 0)); |
| |
| javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); |
| this.setLayout(layout); |
| layout.setHorizontalGroup( |
| layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() |
| .addContainerGap() |
| .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) |
| .addComponent(clientInfoPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE) |
| .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() |
| .addComponent(clientInfoLabel) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) |
| .addComponent(usernameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE)) |
| .addComponent(validationMsgLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE)) |
| .addContainerGap()) |
| ); |
| layout.setVerticalGroup( |
| layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) |
| .addGroup(layout.createSequentialGroup() |
| .addContainerGap() |
| .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) |
| .addComponent(clientInfoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) |
| .addComponent(usernameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) |
| .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) |
| .addComponent(clientInfoPane) |
| .addGap(5, 5, 5) |
| .addComponent(validationMsgLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE) |
| .addContainerGap()) |
| ); |
| |
| bindingGroup.bind(); |
| }// </editor-fold>//GEN-END:initComponents |
| |
| /** |
| * @param args the command line arguments |
| */ |
| public static void main(String args[]) { |
| /* Set the Nimbus look and feel */ |
| //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> |
| /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. |
| * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html |
| */ |
| try { |
| javax.swing.UIManager.LookAndFeelInfo[] installedLookAndFeels=javax.swing.UIManager.getInstalledLookAndFeels(); |
| for (int idx=0; idx<installedLookAndFeels.length; idx++) |
| if ("Nimbus".equals(installedLookAndFeels[idx].getName())) { |
| javax.swing.UIManager.setLookAndFeel(installedLookAndFeels[idx].getClassName()); |
| break; |
| } |
| } catch (ClassNotFoundException ex) { |
| java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (InstantiationException ex) { |
| java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (IllegalAccessException ex) { |
| java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } catch (javax.swing.UnsupportedLookAndFeelException ex) { |
| java.util.logging.Logger.getLogger(ClientEditor.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); |
| } |
| //</editor-fold> |
| |
| /* Create and display the form */ |
| java.awt.EventQueue.invokeLater(new Runnable() { |
| public void run() { |
| javax.swing.JFrame frame = new javax.swing.JFrame("Client Editor"); |
| frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); |
| frame.getContentPane().add(new ClientEditor()); |
| frame.pack(); |
| frame.setVisible(true); |
| } |
| }); |
| } |
| |
| // Variables declaration - do not modify//GEN-BEGIN:variables |
| private clienteditor.AgeConverter ageConverter; |
| private javax.swing.JLabel ageLabel; |
| private javax.swing.JTextField ageTextField; |
| private clienteditor.AgeValidator ageValidator; |
| private javax.swing.JLabel clientInfoLabel; |
| private javax.swing.JTabbedPane clientInfoPane; |
| private javax.swing.JPanel contactPanel; |
| private javax.swing.JLabel emailLabel; |
| private javax.swing.JTextField emailTextField; |
| private clienteditor.EmailValidator emailValidator; |
| private javax.swing.JRadioButton femaleRadioButton; |
| private javax.swing.JLabel firstNameLabel; |
| private javax.swing.JTextField firstNameTextField; |
| private javax.swing.JLabel imLabel; |
| private javax.swing.JTextField imTextField; |
| private javax.swing.JRadioButton maleRadioButton; |
| private javax.swing.JComboBox maritalComboBox; |
| private clienteditor.MaritalStatusConverter maritalStatusConverter; |
| private javax.swing.JLabel maritalStatusLabel; |
| private javax.swing.JLabel nicknameLabel; |
| private javax.swing.JTextField nicknameTextField; |
| private javax.swing.JPanel personalPanel; |
| private clienteditor.RequiredStringValidator requiredStringValidator; |
| private javax.swing.ButtonGroup sexButtonGroup; |
| private javax.swing.JLabel sexLabel; |
| private javax.swing.JLabel surnameLabel; |
| private javax.swing.JTextField surnameTextField; |
| private javax.swing.JLabel usernameLabel; |
| private javax.swing.JLabel validationMsgLabel; |
| private javax.swing.JLabel webLabel; |
| private javax.swing.JTextField webTextField; |
| private org.jdesktop.beansbinding.BindingGroup bindingGroup; |
| // End of variables declaration//GEN-END:variables |
| |
| } |