⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s21.htm

📁 提供给JAVA编程者图形界面卷
💻 HTM
📖 第 1 页 / 共 2 页
字号:
            <p> textArea.getDocument().addDocumentListener(<br>              new DocumentListener() {<br>              public void insertUpdate(DocumentEvent e) {<br>              saveAction.setEnabled(true);<br>              updateStatus(e);<br>              }<br>              public void removeUpdate(DocumentEvent e) {<br>              saveAction.setEnabled(true);<br>              updateStatus(e);<br>              }<br>              public void changedUpdate(DocumentEvent e) {<br>              saveAction.setEnabled(true);<br>              updateStatus(e);<br>              }<br>              private void updateStatus(DocumentEvent e) {<br>              status.append(e.getType().toString());<br>              status.append(&quot; Offset: &quot; + e.getOffset());<br>              status.append(&quot; Length: &quot; + e.getLength() + &quot;\n&quot;);<br>              }<br>              });</p>            <p> setJMenuBar(createMenuBar());<br>              }<br>              private JMenuBar createMenuBar() {<br>              JMenuBar menuBar = new JMenuBar();<br>              JMenu editMenu = new JMenu(&quot;Edit&quot;);</p>            <p> editMenu.add(new DefaultEditorKit.CutAction());<br>              editMenu.add(new DefaultEditorKit.CopyAction());<br>              editMenu.add(new DefaultEditorKit.PasteAction());<br>              editMenu.addSeparator();<br>              editMenu.add(saveAction);</p>            <p> menuBar.add(editMenu);<br>              return menuBar;<br>              }<br>              public static void main(String args[]) {<br>              GJApp.launch(new Test(), <br>              &quot;Using Document Listeners&quot;,<br>              300,300,650,500);<br>              }<br>              }<br>              class GJApp extends WindowAdapter {<br>              static private JPanel statusArea = new JPanel();<br>              static private JLabel status = new JLabel(&quot; &quot;);<br>              static private ResourceBundle resources;</p>            <p> public static void launch(final JFrame f, String title,<br>              final int x, final int y, <br>              final int w, int h) {<br>              launch(f,title,x,y,w,h,null); <br>              }<br>              public static void launch(final JFrame f, String title,<br>              final int x, final int y, <br>              final int w, int h,<br>              String propertiesFilename) {<br>              f.setTitle(title);<br>              f.setBounds(x,y,w,h);<br>              f.setVisible(true);</p>            <p> statusArea.setBorder(BorderFactory.createEtchedBorder());<br>              statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));<br>              statusArea.add(status);<br>              status.setHorizontalAlignment(JLabel.LEFT);</p>            <p> f.setDefaultCloseOperation(<br>              WindowConstants.DISPOSE_ON_CLOSE);</p>            <p> if(propertiesFilename != null) {<br>              resources = ResourceBundle.getBundle(<br>              propertiesFilename, Locale.getDefault());<br>              }</p>            <p> f.addWindowListener(new WindowAdapter() {<br>              public void windowClosed(WindowEvent e) {<br>              System.exit(0);<br>              }<br>              });<br>              }<br>              static public JPanel getStatusArea() {<br>              return statusArea;<br>              }<br>              static public void showStatus(String s) {<br>              status.setText(s);<br>              }<br>              static Object getResource(String key) {<br>              if(resources != null) {<br>              return resources.getString(key);<br>              }<br>              return null;<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 21.5 加字符与加重器</p>            <p>&nbsp;</p>            <p> 21.5.1 加字符</p>            <p>&nbsp;</p>            <p> 21.5.2 加字符监听器</p>            <p>&nbsp;</p>            <p align="center"><b>例21-6 实现一个加字符监听器</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.text.*;            <p>public class Test extends JApplet {<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JTextArea textArea = new JTextArea();</p>            <p> contentPane.add(textArea, BorderLayout.CENTER);</p>            <p> textArea.setFont(new Font(&quot;Dialog&quot;, Font.PLAIN, 24));</p>            <p> textArea.addCaretListener(new CaretListener() {<br>              public void caretUpdate(CaretEvent e) {<br>              showStatus(&quot;Mark: &quot; + e.getMark() +<br>              &quot; / Dot: &quot; + e.getDot());<br>              }<br>              });<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 21.5.3 定制加字符</p>            <p>&nbsp;</p>            <p align="center"><b>例21-7 实现一个定制加字符</b></p>            <hr noshade size="1">            import javax.swing.*;<br>            import javax.swing.plaf.*;<br>            import javax.swing.text.*;<br>            import java.awt.*;<br>            import java.awt.event.*;<br>            import java.util.*;            <p>public class Test extends JApplet {<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JTextArea textArea = new JTextArea();</p>            <p> textArea.setCaret(new TriangleCaret(8));<br>              textArea.setFont(new Font(&quot;Dialog&quot;, Font.ITALIC, 24));<br>              contentPane.add(textArea, BorderLayout.CENTER);<br>              }<br>              }<br>              class TriangleCaret extends DefaultCaret {<br>              private int triangleWidth, left, right, top, bottom, middle;</p>            <p> public TriangleCaret(int triangleWidth) {<br>              this.triangleWidth = triangleWidth;<br>              }<br>              public void paint(Graphics g) {<br>              if(isVisible()) {<br>              try {<br>              JTextComponent comp = getComponent();<br>              Rectangle r = comp.modelToView(getDot());</p>            <p> setLocations(r);<br>              g.setColor(comp.getCaretColor());</p>            <p> g.drawLine(left, bottom, middle, top);<br>              g.drawLine(middle, top, right, bottom);<br>              g.drawLine(right, bottom, left, bottom);<br>              }<br>              catch(BadLocationException ex) {<br>              ex.printStackTrace();<br>              }<br>              }<br>              }<br>              protected synchronized void damage(Rectangle r) {<br>              if(r != null) {<br>              setLocations(r);<br>              x = left;<br>              y = top;<br>              width = right - left + 1;<br>              height = bottom - top + 1;<br>              }<br>              }<br>              private void setLocations(Rectangle r) {<br>              left = r.x - triangleWidth/2; <br>              right = r.x + triangleWidth/2;<br>              bottom = r.y + r.height - 1; <br>              top = bottom - triangleWidth;<br>              middle = r.x;</p>            <p> repaint();<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 21.5.4 加重器</p>            <p>&nbsp;</p>            <p align="center"><b>例21-8 一个定制的加重器</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import javax.swing.*;<br>            import javax.swing.text.*;            <p>public class Test extends JApplet {<br>              public Test() {<br>              Container contentPane = getContentPane();<br>              JTextArea textArea = new JTextArea(<br>              &quot;File choosers, like option panes, are lightweight\n&quot;               +<br>              &quot;components that\n&quot; +<br>              &quot;are meant to be placed ...&quot;);</p>            <p> textArea.setCaret(new BoxHighlightingCaret());<br>              textArea.setFont(new Font(&quot;Dialog&quot;, Font.ITALIC, 24));</p>            <p> contentPane.add(new JScrollPane(textArea), <br>              BorderLayout.CENTER);<br>              }<br>              }<br>              class BoxHighlightingCaret extends DefaultCaret {<br>              private static BoxHighlighterPainter painter = <br>              new BoxHighlighterPainter(null);</p>            <p> public Highlighter.HighlightPainter getSelectionPainter(){<br>              return painter;<br>              }<br>              static class BoxHighlighterPainter <br>              extends DefaultHighlighter.DefaultHighlightPainter {<br>              private Color color;</p>            <p> public BoxHighlighterPainter(Color color) {<br>              super(color);<br>              this.color = color;<br>              }<br>              public Shape paintLayer(Graphics g, int p0, int p1, <br>              Shape shape, JTextComponent comp,<br>              View view) {<br>              Rectangle b = shape.getBounds();</p>            <p> try {<br>              g.setColor(getColor(comp));</p>            <p> Rectangle r1 = comp.modelToView(p0);<br>              Rectangle r2 = comp.modelToView(p1);</p>            <p> g.drawRect(r1.x, r1.y, // x,y<br>              r2.x - r1.x - 1, // width<br>              r1.height - 1); // height<br>              }<br>              catch(BadLocationException ex) {<br>              ex.printStackTrace();<br>              }<br>              return b;<br>              }<br>              private Color getColor(JTextComponent comp) {<br>              return color != null ? color : <br>              comp.getSelectionColor();<br>              }<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 21.6 撤销/恢复</p>            <p>&nbsp;</p>            <p align="center"><b>例21-9 一个撤消和恢复的实现</b></p>            <hr noshade size="1">            import java.awt.*;<br>            import java.awt.event.*;<br>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.text.*;<br>            import javax.swing.undo.*;            <p>public class Test extends JApplet {<br>              private JTextArea textArea = new JTextArea(&quot;some content&quot;);<br>              private Document document = textArea.getDocument();<br>              private UndoManager undoManager = new UndoManager();<br>              private UndoLastAction undoAction = new UndoLastAction();<br>              private RedoAction redoAction = new RedoAction();</p>            <p> public Test() {<br>              Container contentPane = getContentPane();</p>            <p> createMenu();<br>              contentPane.add(textArea, BorderLayout.CENTER);</p>            <p> textArea.setFont(new Font(&quot;Dialog&quot;, Font.PLAIN, 24));<br>              document.addUndoableEditListener(<br>              new UndoableEditListener() {<br>              public void undoableEditHappened(UndoableEditEvent e){<br>              undoManager.addEdit(e.getEdit());<br>              undoAction.update();<br>              redoAction.update();<br>              }<br>              });<br>              }<br>              private void createMenu() {<br>              JMenuBar menuBar = new JMenuBar();<br>              JMenu editMenu = new JMenu(&quot;Edit&quot;);</p>            <p> editMenu.add(new DefaultEditorKit.CutAction());<br>              editMenu.add(new DefaultEditorKit.CopyAction());<br>              editMenu.add(new DefaultEditorKit.PasteAction());</p>            <p> editMenu.addSeparator();</p>            <p> editMenu.add(undoAction);<br>              editMenu.add(redoAction);</p>            <p> menuBar.add(editMenu);<br>              setJMenuBar(menuBar);<br>              }<br>              class RedoAction extends AbstractAction {<br>              public RedoAction() {<br>              super(&quot;Redo&quot;);<br>              update();<br>              }<br>              public void actionPerformed(ActionEvent e) {<br>              undoManager.redo();<br>              undoAction.update();<br>              update();<br>              }<br>              public void update() {<br>              boolean canRedo = undoManager.canRedo();</p>            <p> if(canRedo) {<br>              setEnabled(true);<br>              putValue(Action.NAME, <br>              undoManager.getRedoPresentationName());<br>              }<br>              else {<br>              setEnabled(false);<br>              putValue(Action.NAME, &quot;Redo&quot;);<br>              }<br>              }<br>              }<br>              class UndoLastAction extends AbstractAction {<br>              public UndoLastAction() {<br>              super(&quot;Undo&quot;);<br>              update();<br>              }<br>              public void actionPerformed(ActionEvent e) {<br>              undoManager.undo();<br>              redoAction.update();<br>              update();<br>              }<br>              public void update() {<br>              boolean canUndo = undoManager.canUndo();</p>            <p> if(canUndo) {<br>              setEnabled(true);<br>              putValue(Action.NAME, <br>              undoManager.getUndoPresentationName());<br>              }<br>              else {<br>              setEnabled(false);<br>              putValue(Action.NAME, &quot;Undo&quot;);<br>              }<br>              }<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 21.7 JTextComponent</p>            <p>&nbsp;</p>            <p> 21.8 本章回顾</p>            <p>&nbsp;</p>            <p>[<a href="index.html" target="_self">目录</a>][<a href="s20.htm">上一页</a>][<a href="s22.htm">下一页</a>](飒龙收藏/2002.5.18)             </p>            </td>          </tr>        </tbody>      </table>    </td>  </tr></tbody></table><script language="javascript">bottomprint()</script></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -