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

📄 s06.htm

📁 Java2Swingt界面设计
💻 HTM
📖 第 1 页 / 共 3 页
字号:
              putValue(Action.NAME,<br>              undo.getUndoPresentationName());<br>              }<br>              }<br>              }<br>              class BackgroundColorEdit extends AbstractUndoableEdit {<br>              public void undo() throws CannotUndoException {<br>              super.undo();<br>              toggleColor();<br>              }<br>              public void redo() throws CannotRedoException {<br>              super.redo();<br>              toggleColor();<br>              }<br>              public String getUndoPresentationName() {<br>              return &quot;Undo&quot;;<br>              }<br>              public String getRedoPresentationName() {<br>              return &quot;Redo&quot;;<br>              }<br>              private void toggleColor() {<br>              Color color = colorPanel.getBackground();<br>              colorPanel.setBackground(oldColor);<br>              oldColor = color;<br>              }<br>              }<br>              }</p>            <hr noshade size="1">            <p> 6.7.2 UndoableEditSupport</p>            <p>&nbsp;</p>            <p align="center"><b>例6-13 使用UndoableEditSupport</b></p>            <hr noshade size="1">            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.undo.*;<br>            import java.awt.*;<br>            import java.awt.event.*;            <p>public class Test extends JApplet {<br>              private ColorPanel colorPanel = new ColorPanel();<br>              private UndoAction undoAction = new UndoAction();</p>            <p> public void init() {<br>              colorPanel.setBorder(<br>              BorderFactory.createTitledBorder(<br>              &quot;Change color and subsequently undo &quot; +<br>              &quot;from the Edit menu&quot;));</p>            <p> makeMenuBar();<br>              colorPanel.addUndoableEditListener(undoAction);<br>              getContentPane().add(colorPanel, BorderLayout.CENTER);<br>              }<br>              private void makeMenuBar() {<br>              JMenuBar menuBar = new JMenuBar();<br>              JMenu editMenu = new JMenu(&quot;Edit&quot;);</p>            <p> editMenu.add(new SetColorAction());<br>              editMenu.add(undoAction);</p>            <p> menuBar.add(editMenu);<br>              setJMenuBar(menuBar);<br>              }<br>              class UndoAction extends AbstractAction <br>              implements UndoableEditListener {<br>              UndoableEdit lastEdit;</p>            <p> public UndoAction() {<br>              putValue(Action.NAME, &quot;Undo&quot;);<br>              setEnabled(false);<br>              }<br>              public void actionPerformed(ActionEvent e) {<br>              String name = (String)getValue(Action.NAME);<br>              boolean isUndo = name.equals(<br>              lastEdit.getUndoPresentationName());<br>              if(isUndo) {<br>              lastEdit.undo(); <br>              putValue(Action.NAME,<br>              lastEdit.getRedoPresentationName());<br>              }<br>              else {<br>              lastEdit.redo(); <br>              putValue(Action.NAME,<br>              lastEdit.getUndoPresentationName());<br>              }<br>              }<br>              public void undoableEditHappened(UndoableEditEvent e) {<br>              lastEdit = e.getEdit();</p>            <p> putValue(Action.NAME, <br>              lastEdit.getUndoPresentationName());</p>            <p> if(lastEdit.canUndo())<br>              setEnabled(true);<br>              }<br>              }<br>              class SetColorAction extends AbstractAction {<br>              public SetColorAction() {<br>              super(&quot;Set color ...&quot;);<br>              }<br>              public void actionPerformed(ActionEvent e) {<br>              Color color = JColorChooser.showDialog(<br>              Test.this, // parent component<br>              &quot;Pick A Color&quot;, // dialog title<br>              null); // initial color</p>            <p> if(color != null) { <br>              colorPanel.setBackground(color);<br>              }<br>              }<br>              }<br>              }<br>              class ColorPanel extends JPanel {<br>              UndoableEditSupport support;<br>              BackgroundColorEdit edit = new BackgroundColorEdit();<br>              Color oldColor;</p>            <p> public void addUndoableEditListener(<br>              UndoableEditListener l) {<br>              support.addUndoableEditListener(l);<br>              }<br>              public void removeUndoableEditListener(<br>              UndoableEditListener l) {<br>              support.removeUndoableEditListener(l);<br>              }<br>              public void setBackground(Color color) {<br>              oldColor = getBackground();<br>              super.setBackground(color);</p>            <p> if(support == null)<br>              support = new UndoableEditSupport();</p>            <p> support.postEdit(edit);<br>              }<br>              class BackgroundColorEdit extends AbstractUndoableEdit {<br>              public void undo() throws CannotUndoException {<br>              super.undo();<br>              toggleColor();<br>              }<br>              public void redo() throws CannotRedoException {<br>              super.redo();<br>              toggleColor();<br>              }<br>              public String getUndoPresentationName() {<br>              return &quot;Undo Background Color Change&quot;;<br>              }<br>              public String getRedoPresentationName() {<br>              return &quot;Redo Background Color Change&quot;;<br>              }<br>              private void toggleColor() {<br>              Color color = getBackground();<br>              setBackground(oldColor);<br>              oldColor = color;<br>              }<br>              }<br>              }</p>            <hr noshade size="1">            <p> 6.7.3 组合编辑</p>            <p>&nbsp;</p>            <p align="center"><b>例6-14 使用组合编辑</b></p>            <hr noshade size="1">            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.undo.*;<br>            import java.awt.*;<br>            import java.awt.event.*;            <p>public class Test extends JApplet {<br>              private UndoableList list = new UndoableList();<br>              private JScrollPane scrollPane = new JScrollPane(list);</p>            <p> private JButton addButton = new JButton(&quot;Add Item&quot;),<br>              endButton = new JButton(&quot;End&quot;),<br>              undoButton = new JButton(&quot;Undo&quot;);</p>            <p> private UndoAction undoAction = new UndoAction();<br>              private CompoundEdit compoundEdit = new CompoundEdit();<br>              private int cnt=0;</p>            <p> public void init() {<br>              Container contentPane = getContentPane();</p>            <p> contentPane.setLayout(new FlowLayout());<br>              contentPane.add(addButton);<br>              contentPane.add(endButton);<br>              contentPane.add(undoButton);<br>              contentPane.add(scrollPane);</p>            <p> scrollPane.setPreferredSize(new Dimension(150,150));<br>              list.addUndoableEditListener(undoAction);</p>            <p> endButton.addActionListener(new ActionListener() {<br>              public void actionPerformed(ActionEvent e) {<br>              compoundEdit.end();<br>              updateButtonsEnabledState();<br>              }<br>              });<br>              addButton.addActionListener(new ActionListener() {<br>              public void actionPerformed(ActionEvent e) {<br>              list.undoableAdd(&quot;item #&quot; + cnt++);<br>              updateButtonsEnabledState();<br>              }<br>              });<br>              undoButton.addActionListener(undoAction);</p>            <p> endButton.setEnabled(false);<br>              undoButton.setEnabled(false);<br>              }<br>              private void updateButtonsEnabledState() {<br>              boolean inProgress = compoundEdit.isInProgress();</p>            <p> endButton.setEnabled(inProgress);<br>              addButton.setEnabled(inProgress);</p>            <p> if(undoButton.getText().equals(&quot;Undo&quot;))<br>              undoButton.setEnabled(compoundEdit.canUndo());<br>              else<br>              undoButton.setEnabled(compoundEdit.canRedo());<br>              }<br>              class UndoAction extends AbstractAction <br>              implements UndoableEditListener {</p>            <p> public UndoAction() {<br>              putValue(Action.NAME, &quot;Undo&quot;);<br>              }<br>              public void actionPerformed(ActionEvent e) {<br>              String name = undoButton.getText();<br>              boolean isUndo = name.equals(&quot;Undo&quot;);</p>            <p> if(isUndo) compoundEdit.undo(); <br>              else compoundEdit.redo(); </p>            <p> undoButton.setText(isUndo ? &quot;Redo&quot; : &quot;Undo&quot;);<br>              }<br>              public void undoableEditHappened(UndoableEditEvent e) {<br>              UndoableEdit edit = e.getEdit();<br>              compoundEdit.addEdit(edit);<br>              endButton.setEnabled(true);<br>              }<br>              }<br>              }<br>              class UndoableList extends JList {<br>              UndoableEditSupport support = new UndoableEditSupport();<br>              DefaultListModel model;</p>            <p> public UndoableList() {<br>              setModel(model = new DefaultListModel());<br>              }<br>              public void addUndoableEditListener(UndoableEditListener l) {<br>              support.addUndoableEditListener(l);<br>              }<br>              public void removeUndoableEditListener(<br>              UndoableEditListener l) {<br>              support.removeUndoableEditListener(l);<br>              }<br>              public void undoableAdd(Object s) {<br>              model.addElement(s);<br>              support.postEdit(new AddItemEdit());<br>              }<br>              class AddItemEdit extends AbstractUndoableEdit {<br>              Object lastItemAdded;</p>            <p> public void undo() throws CannotUndoException {<br>              super.undo();<br>              lastItemAdded = model.getElementAt(model.getSize()-1);<br>              model.removeElement(lastItemAdded);<br>              }<br>              public void redo() throws CannotRedoException {<br>              super.redo();<br>              model.addElement(lastItemAdded);<br>              }<br>              }<br>              }</p>            <hr noshade size="1">            <p> 6.7.4 UndoManager</p>            <p>&nbsp;</p>            <p> 6.7.5 状态编辑</p>            <p>&nbsp;</p>            <p align="center"><b>例6-15 使用状态编辑</b></p>            <hr noshade size="1">            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.undo.*;<br>            import java.awt.*;<br>            import java.awt.event.*;<br>            import java.util.*;            <p>public class Test extends JApplet {<br>              private TextFieldPanel panel = new TextFieldPanel();<br>              private StateEdit stateEdit;</p>            <p> private JButton startButton = new JButton(&quot;Start Edit&quot;),<br>              endButton = new JButton(&quot;End Edit&quot;),<br>              undoButton = new JButton(&quot;Undo&quot;);</p>            <p> public void init() {<br>              Container contentPane = getContentPane();</p>            <p> contentPane.setLayout(new FlowLayout());<br>              contentPane.add(startButton);<br>              contentPane.add(endButton);<br>              contentPane.add(undoButton);<br>              contentPane.add(panel);</p>            <p> endButton.setEnabled(false);<br>              undoButton.setEnabled(false);</p>            <p> startButton.addActionListener(new ActionListener() {<br>              public void actionPerformed(ActionEvent e) {<br>              stateEdit = new StateEdit(panel);<br>              endButton.setEnabled(true);<br>              startButton.setEnabled(false);<br>              }<br>              });<br>              endButton.addActionListener(new ActionListener() {<br>              public void actionPerformed(ActionEvent e) {<br>              stateEdit.end();<br>              undoButton.setEnabled(true);<br>              endButton.setEnabled(false);<br>              }<br>              });<br>              undoButton.addActionListener(new ActionListener() {<br>              public void actionPerformed(ActionEvent e) {<br>              String name = undoButton.getText();<br>              boolean isUndo = name.equals(&quot;Undo&quot;);</p>            <p> if(isUndo) stateEdit.undo(); <br>              else stateEdit.redo(); </p>            <p> undoButton.setText(isUndo ? &quot;Redo&quot; : &quot;Undo&quot;);<br>              }<br>              });<br>              }<br>              }<br>              class TextFieldPanel extends JPanel implements StateEditable {<br>              JTextField[] fields = new JTextField[] {<br>              new JTextField(&quot;text field 1&quot;), <br>              new JTextField(&quot;text field 2&quot;),<br>              new JTextField(&quot;text field 3&quot;), <br>              new JTextField(&quot;text field 4&quot;),<br>              };</p>            <p> public TextFieldPanel() {<br>              setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));</p>            <p> for(int i=0; i &lt; fields.length; ++i)<br>              add(fields[i]);<br>              }<br>              public void storeState(Hashtable hashtable) {<br>              for(int i=0; i &lt; fields.length; ++i)<br>              hashtable.put(fields[i], fields[i].getText());<br>              }<br>              public void restoreState(Hashtable hashtable) {<br>              Enumeration keys = hashtable.keys();</p>            <p> while(keys.hasMoreElements()) {<br>              JTextField field = (JTextField)keys.nextElement();<br>              field.setText((String)hashtable.get(field));<br>              }<br>              }<br>              }</p>            <hr noshade size="1">            <p> 6.8 本章回顾</p>            <p>&nbsp;</p>            <p> [<a href="index.html" target="_self">目录</a>][<a href="s05.htm">上一页</a>][<a href="s07.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 + -