📄 propertynamedialog.java
字号:
package org.joone.edit;import java.beans.*;import java.awt.*;import java.awt.event.*;import java.util.Vector;public class PropertyNameDialog extends Dialog implements ActionListener { /* * Pop up a property dialog to look for a property of the given * source object. If "match" is non-null, then "match" must be * equal to or a sunclass of the result property. * If "readable" is true, then readable bound properties will be * displayed, otherwise writable properties will be displayed. */ PropertyNameDialog(Frame frame, Object source, String message, Class match, boolean readable) { super(frame, "PropertyNameDialog", true); new WindowCloser(this); setLayout(null); PropertyDescriptor allProperties[]; try { allProperties = Introspector.getBeanInfo(source.getClass()).getPropertyDescriptors(); if (allProperties == null) { new ErrorDialog(frame, "PropertyNameDialog : couldn't find PropertyDescriptors"); return; } } catch (Exception ex) { new ErrorDialog(frame, "PropertyNameDialog: Unexpected exception: \n" + ex); return; } // Select matching properties properties = new Vector(); for (int i = 0; i < allProperties.length; i++) { PropertyDescriptor pd = allProperties[i]; if (readable && !pd.isBound()) { continue; } if (readable && pd.getReadMethod() == null) { continue; } if (!readable && pd.getWriteMethod() == null) { continue; } if (match == null || isSubclass(match, pd.getPropertyType())) { properties.addElement(pd); } } int width = 300; if (properties.isEmpty()) { new ErrorDialog(frame, "No suitable properties"); return; } int height = 200; Label l = new Label(message, Label.CENTER); l.setBounds(2, 30, width-4, 25); add(l); list = new List(8, false); for (int i = 0; i < properties.size(); i++) { PropertyDescriptor pd = (PropertyDescriptor)properties.elementAt(i); list.add(pd.getDisplayName()); } list.select(0); list.setBounds(10, 60, width-20, height-60); add(list); // Now do the "Cancel" and "OK" buttons. height += 10; cancelButton = new Button("Cancel"); cancelButton.addActionListener(this); add(cancelButton); cancelButton.setBounds((width/2)-70, height-5, 60, 30); okButton = new Button("OK"); okButton.addActionListener(this); add(okButton); okButton.setBounds((width/2)+10, height-5, 60, 30); height += 55; list.setBounds(10, 60, width-20, height-130); int x = frame.getLocation().x + 30; int y = frame.getLocation().y + 50; setBounds(x, y, width, height); show(); } /** * Return true if class a is either equivalent to class b, or * if class a is a subclass of class b. * Note tht either or both "Class" objects may represent interfaces. */ static boolean isSubclass(Class a, Class b) { // We rely on the fact that for any given java class or // primtitive type there is a unqiue Class object, so // we can use object equivalence in the comparisons. if (a == b) { return true; } if (a == null || b == null) { return false; } for (Class x = a; x != null; x = x.getSuperclass()) { if (x == b) { return true; } if (b.isInterface()) { Class interfaces[] = x.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { if (interfaces[i] == b) { return true; } } } } return false; } public PropertyDescriptor getResult() { return result; } public void actionPerformed(ActionEvent evt) { if (evt.getSource() == okButton) { if (list != null) { int index = list.getSelectedIndex(); if (index >= 0) { result = (PropertyDescriptor)properties.elementAt(index); } } } // For either canel or OK we're done. dispose(); } private Button okButton; private Button cancelButton; private List list; private Vector properties; private PropertyDescriptor result; private static final long serialVersionUID = 7574936938123171751L; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -