📄 formview.java
字号:
if (name == null) { return; } String value = null; HTML.Tag tag = (HTML.Tag)elem.getAttributes().getAttribute (StyleConstants.NameAttribute); if (tag == HTML.Tag.INPUT) { value = getInputElementData(attr); } else if (tag == HTML.Tag.TEXTAREA) { value = getTextAreaData(attr); } else if (tag == HTML.Tag.SELECT) { loadSelectData(attr, buffer); } if (name != null && value != null) { appendBuffer(buffer, name, value); } } /** * Returns the data associated with an <INPUT> form * element. The value of "type" attributes is * used to determine the type of the model associated * with the element and then the relevant data is * extracted. */ private String getInputElementData(AttributeSet attr) { Object model = attr.getAttribute(StyleConstants.ModelAttribute); String type = (String) attr.getAttribute(HTML.Attribute.TYPE); String value = null; if (type.equals("text") || type.equals("password")) { Document doc = (Document)model; try { value = doc.getText(0, doc.getLength()); } catch (BadLocationException e) { value = null; } } else if (type.equals("submit") || type.equals("hidden")) { value = (String) attr.getAttribute(HTML.Attribute.VALUE); if (value == null) { value = ""; } } else if (type.equals("radio") || type.equals("checkbox")) { ButtonModel m = (ButtonModel)model; if (m.isSelected()) { value = (String) attr.getAttribute(HTML.Attribute.VALUE); if (value == null) { value = "on"; } } } else if (type.equals("file")) { Document doc = (Document)model; String path; try { path = doc.getText(0, doc.getLength()); } catch (BadLocationException e) { path = null; } if (path != null && path.length() > 0) { value = path;/* try { Reader reader = new BufferedReader(new FileReader(path)); StringBuffer buffer = new StringBuffer(); char[] cBuff = new char[1024]; int read; try { while ((read = reader.read(cBuff)) != -1) { buffer.append(cBuff, 0, read); } } catch (IOException ioe) { buffer = null; } try { reader.close(); } catch (IOException ioe) {} if (buffer != null) { value = buffer.toString(); } } catch (IOException ioe) {}*/ } } return value; } /** * Returns the data associated with the <TEXTAREA> form * element. This is done by getting the text stored in the * Document model. */ private String getTextAreaData(AttributeSet attr) { Document doc = (Document)attr.getAttribute(StyleConstants.ModelAttribute); try { return doc.getText(0, doc.getLength()); } catch (BadLocationException e) { return null; } } /** * Loads the buffer with the data associated with the Select * form element. Basically, only items that are selected * and have their name attribute set are added to the buffer. */ private void loadSelectData(AttributeSet attr, StringBuffer buffer) { String name = (String)attr.getAttribute(HTML.Attribute.NAME); if (name == null) { return; } Object m = attr.getAttribute(StyleConstants.ModelAttribute); if (m instanceof OptionListModel) { OptionListModel model = (OptionListModel)m; for (int i = 0; i < model.getSize(); i++) { if (model.isSelectedIndex(i)) { Option option = (Option) model.getElementAt(i); appendBuffer(buffer, name, option.getValue()); } } } else if (m instanceof ComboBoxModel) { ComboBoxModel model = (ComboBoxModel)m; Option option = (Option)model.getSelectedItem(); if (option != null) { appendBuffer(buffer, name, option.getValue()); } } } /** * Appends name / value pairs into the * buffer. Both names and values are encoded using the * URLEncoder.encode() method before being added to the * buffer. */ private void appendBuffer(StringBuffer buffer, String name, String value) { if (buffer.length() > 0) { buffer.append('&'); } String encodedName = URLEncoder.encode(name); buffer.append(encodedName); buffer.append('='); String encodedValue = URLEncoder.encode(value); buffer.append(encodedValue); } /** * Returns true if the Element <code>elem</code> represents a control. */ private boolean isControl(Element elem) { return elem.isLeaf(); } /** * Iterates over the element hierarchy to determine if * the element parameter, which is assumed to be an * <INPUT> element of type password or text, is the last * one of either kind, in the form to which it belongs. */ boolean isLastTextOrPasswordField() { Element parent = getFormElement(); Element elem = getElement(); if (parent != null) { ElementIterator it = new ElementIterator(parent); Element next; boolean found = false; while ((next = it.next()) != null) { if (next == elem) { found = true; } else if (found && isControl(next)) { AttributeSet elemAttr = next.getAttributes(); if (HTMLDocument.matchNameAttribute (elemAttr, HTML.Tag.INPUT)) { String type = (String)elemAttr.getAttribute (HTML.Attribute.TYPE); if ("text".equals(type) || "password".equals(type)) { return false; } } } } } return true; } /** * Resets the form * to its initial state by reinitializing the models * associated with each form element to their initial * values. * * param elem the element that triggered the reset */ void resetForm() { Element parent = getFormElement(); if (parent != null) { ElementIterator it = new ElementIterator(parent); Element next; while((next = it.next()) != null) { if (isControl(next)) { AttributeSet elemAttr = next.getAttributes(); Object m = elemAttr.getAttribute(StyleConstants. ModelAttribute); if (m instanceof TextAreaDocument) { TextAreaDocument doc = (TextAreaDocument)m; doc.reset(); } else if (m instanceof PlainDocument) { try { PlainDocument doc = (PlainDocument)m; doc.remove(0, doc.getLength()); if (HTMLDocument.matchNameAttribute (elemAttr, HTML.Tag.INPUT)) { String value = (String)elemAttr. getAttribute(HTML.Attribute.VALUE); if (value != null) { doc.insertString(0, value, null); } } } catch (BadLocationException e) { } } else if (m instanceof OptionListModel) { OptionListModel model = (OptionListModel) m; int size = model.getSize(); for (int i = 0; i < size; i++) { model.removeIndexInterval(i, i); } BitSet selectionRange = model.getInitialSelection(); for (int i = 0; i < selectionRange.size(); i++) { if (selectionRange.get(i)) { model.addSelectionInterval(i, i); } } } else if (m instanceof OptionComboBoxModel) { OptionComboBoxModel model = (OptionComboBoxModel) m; Option option = model.getInitialSelection(); if (option != null) { model.setSelectedItem(option); } } else if (m instanceof JToggleButton.ToggleButtonModel) { boolean checked = ((String)elemAttr.getAttribute (HTML.Attribute.CHECKED) != null); JToggleButton.ToggleButtonModel model = (JToggleButton.ToggleButtonModel)m; model.setSelected(checked); } } } } } /** * BrowseFileAction is used for input type == file. When the user * clicks the button a JFileChooser is brought up allowing the user * to select a file in the file system. The resulting path to the selected * file is set in the text field (actually an instance of Document). */ private class BrowseFileAction implements ActionListener { private AttributeSet attrs; private Document model; BrowseFileAction(AttributeSet attrs, Document model) { this.attrs = attrs; this.model = model; } public void actionPerformed(ActionEvent ae) { // PENDING: When mime support is added to JFileChooser use the // accept value of attrs. JFileChooser fc = new JFileChooser(); fc.setMultiSelectionEnabled(false); if (fc.showOpenDialog(getContainer()) == JFileChooser.APPROVE_OPTION) { File selected = fc.getSelectedFile(); if (selected != null) { try { if (model.getLength() > 0) { model.remove(0, model.getLength()); } model.insertString(0, selected.getPath(), null); } catch (BadLocationException ble) {} } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -