📄 chatdialogview.java
字号:
if (Logging.SHOW_FINE && LOG.isLoggable(Level.FINE)) { LOG.fine("Begin removeText(JXEditorPane, int, int)"); } String s = readText(editorPane); if (Logging.SHOW_FINE && LOG.isLoggable(Level.FINE)) { LOG.fine("editorPane = " + s); LOG.fine("start = " + start); LOG.fine("end = " + end); } try { editorPane.getDocument().remove(start, end); } catch (BadLocationException ble) { if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) { LOG.log(Level.SEVERE, "Caught unexpected Exception", ble); } } update(editorPane); if (Logging.SHOW_FINE && LOG.isLoggable(Level.FINE)) { LOG.fine("End removeText(JXEditorPane, int, int)"); } return s; } private void update(JXEditorPane editorPane) { if (Logging.SHOW_FINE && LOG.isLoggable(Level.FINE)) { LOG.fine("In update(JXEditorPane)"); } editorPane.revalidate(); editorPane.repaint(); } public void updateConnectionState() { if (this.dialog != null && this.send != null) { boolean connected = this.dialog.isConnected(); send.setEnabled(connected); } } /** * External Object wrappes the different Datasources (Dnd or Copy/Paste for now) * TODO: move this class hierachy to a separate Class (something like an own TransferHandler) */ private interface ExternalObject { Object getData(DataFlavor p_dataFlavour) throws UnsupportedFlavorException; boolean isDataFlavorSupported(DataFlavor p_dataFlavour); Transferable getTransferable(); } /** * Wrappes an external object generated by an Paste Event */ private final class PastedExternalObject implements ExternalObject { private final Transferable m_transferable; public Transferable getTransferable() { return m_transferable; } public PastedExternalObject(Transferable p_transferableFromClipboard) { m_transferable = p_transferableFromClipboard; } public Object getData(DataFlavor p_dataFlavour) throws UnsupportedFlavorException { try { return m_transferable.getTransferData(p_dataFlavour); } catch (IOException e) { e.printStackTrace(); return null; } } public boolean isDataFlavorSupported(DataFlavor p_dataFlavour) { return m_transferable.isDataFlavorSupported(p_dataFlavour); } } /** * Wrappes an external object generated by a drop Event */ private class DroppedExternalObject implements ExternalObject { private final DropTargetDropEvent m_dropEvent; public DroppedExternalObject(DropTargetDropEvent p_dropEvent) { m_dropEvent = p_dropEvent; } public Transferable getTransferable() { return m_dropEvent.getTransferable(); } public Object getData(DataFlavor p_dataFlavour) throws UnsupportedFlavorException { try { return m_dropEvent.getTransferable().getTransferData(p_dataFlavour); } catch (IOException e) { e.printStackTrace(); return null; } } public boolean isDataFlavorSupported(DataFlavor p_dataFlavour) { return m_dropEvent.isDataFlavorSupported(p_dataFlavour); } } private class MyDropTargetListener implements DropTargetListener { public void dragEnter(DropTargetDragEvent dtde) { dtde.acceptDrag(DnDConstants.ACTION_COPY); } public void dragExit(DropTargetEvent dte) { // Do nothing. Needed for DropTargetListener Interface } public void dragOver(DropTargetDragEvent dtde) { // Do nothing. Needed for DropTargetListener Interface } public void drop(DropTargetDropEvent dtde) { if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { dtde.acceptDrop(DnDConstants.ACTION_COPY); } else if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) { dtde.acceptDrop(DnDConstants.ACTION_COPY); } boolean isValid = handleExternalDataInput(new DroppedExternalObject(dtde)); dtde.dropComplete(isValid); if (!isValid) { dtde.rejectDrop(); } } public void dropActionChanged(DropTargetDragEvent dtde) { // Do nothing. Needed for DropTargetListener Interface } /** * This one is doing the editor manipulation based on a already choosen dropped java object * * @param d * @return */ public boolean handle(Object d) { boolean isValid = false; String s = null; if (d != null) { if (d instanceof Collection) { for (Object o : ((Collection) d)) { isValid = handle(o); } } else if (d instanceof File) { s = processFile((File) d); } else if (d instanceof String) { s = processString((String) d); } if (s != null) { insertText(editor, s); isValid = true; } else { isValid = false; } } return isValid; } private String processFile(File p_file) { try { URL url = p_file.toURL(); return processURL(url); } catch (MalformedURLException e) { if (Logging.SHOW_WARNING && LOG.isLoggable(Level.WARNING)) { LOG.log(Level.WARNING, "Caught unexpected Exception", e); } } return null; } private String processString(String d) { String s = null; if (d != null && d.trim().length() > 0) { URL u = null; try { u = new URL(d); } catch (MalformedURLException mue) { if (Logging.SHOW_WARNING && LOG.isLoggable(Level.WARNING)) { LOG.log(Level.WARNING, "Caught unexpected Exception", mue); } } if (u != null) { s = processURL(u); } else { s = decorateText(d); } } return s; } private String processURL(URL p_u) { String s = null; if (p_u.getProtocol().equalsIgnoreCase(UIConstants.PROTOCOL_FILE)) { try { Object o = p_u.getContent(); //nano: //right now we can only handle simple input streams //dragged textfiles will end here as a SimpleTextInputStream //maybe move this filehandling inside processFile if (o instanceof InputStream) { s = decorateText(readInputStream((InputStream) o)); } } catch (IOException e) { e.printStackTrace(); } } else if (p_u.getProtocol().equalsIgnoreCase(UIConstants.PROTOCOL_HTTP)) { //firefox url for example s = decorateHTML(p_u); } return s; } /** * Read all data from the given input Stream and returns it as a string * * @param o * @return */ private String readInputStream(InputStream o) { StringBuffer sb = null; try { Reader r = new BufferedReader(new InputStreamReader(o)); for (int c = r.read(); c >= 0; c = r.read()) { if (sb == null) { sb = new StringBuffer(); } sb.append((char) c); } } catch (IOException ioe) { if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) { LOG.log(Level.SEVERE, "Caught unexpected Exception", ioe); } } return sb != null ? sb.toString() : null; } private String decorateHTML(URL u) { String s = null; String t = u != null ? u.toString() : null; if (t != null) { if (isImage(u)) { s = UIConstants.IMAGE_PREFIX + t + UIConstants.IMAGE_POSTFIX; } else { int i = t.indexOf(UIConstants.URI_DELIMITER); s = UIConstants.ANCHOR_PREFIX + t + UIConstants.ANCHOR_PREFIX_CLOSE + ((i >= 0) ? t.substring(i + UIConstants.URI_DELIMITER.length()) : t) + UIConstants.ANCHOR_POSTFIX; } } return s; } private boolean isImage(URL u) { String s = u != null ? u.getFile().toLowerCase() : null; int i = s.lastIndexOf(UIConstants.DOT); String t = i > -1 ? s.substring(i) : null; return imageTypes.contains(t); } private String decorateText(String s) { String t = s != null ? s.trim() : null; if (t != null && t.length() > 0) { t = UIConstants.PRE_PREFIX + t + UIConstants.PRE_POSTFIX; } return t; } /** * This is the central entry point for Paste and DnD Drop * * @param p_externalObject * @return */ public boolean handleExternalDataInput(ExternalObject p_externalObject) { Object d = null; if (p_externalObject.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { try { d = p_externalObject.getData(DataFlavor.javaFileListFlavor); } catch (UnsupportedFlavorException use) { if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) { LOG.log(Level.SEVERE, "Caught unexpected Exception", use); } } } else if (p_externalObject.isDataFlavorSupported(DataFlavor.stringFlavor)) { try { d = p_externalObject.getData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException use) { if (Logging.SHOW_SEVERE && LOG.isLoggable(Level.SEVERE)) { LOG.log(Level.SEVERE, "Caught unexpected Exception", use); } } } boolean ownHandlingSuccess = handle(d); if (!ownHandlingSuccess && p_externalObject.getTransferable() != null) { return editor.getTransferHandler().importData(editor, p_externalObject.getTransferable()); } else { return true; } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -