?? menueditpane.java
字號:
package com.sutternow.swingkar.gui;import com.sutternow.swingkar.ConfigManager;import com.sutternow.misc.Utils;import net.sf.easylayouts.RowLayout;import net.sf.easylayouts.RowConstraints;import org.dom4j.Element;import org.dom4j.Node;import javax.swing.*;import javax.swing.table.AbstractTableModel;import java.awt.*;import java.awt.event.*;import java.util.*;import java.util.List;/** * Created by IntelliJ IDEA. * User: Matthew Payne * Date: Jan 18, 2003 * Time: 1:01:50 AM * To change this template use Options | File Templates. */public class MenuEditPane implements SimpleForm, ActionListener, ItemListener, MouseListener { public String Title = "Menu"; public MenuEditPane(ConfigManager _cm) { cm = _cm; refPanel = this.createPanel(); actionList = new ArrayList(); } public String getTitle() { return Title; } public JPanel getEditForm() { return refPanel; } private JPanel createPanel() { final JPanel panel = new JPanel(); final JPanel bottomPanel = new JPanel(); RowLayout rowLayout = new RowLayout(panel, 1, 10); rowLayout.add(new JLabel("Title:"), 0); title = new JTextField(25); rowLayout.add(title, 0); rowLayout.addEmptyRow(5); rowLayout.add(new JLabel("Sub Menu:"), 2); actionPath = new JComboBox(); actionPath.addItemListener(this); //rowLayout.add(actionPath, 1); rowLayout.addStrut(220, 2); rowLayout.add(new JLabel("Allowed Role(s):"), 2); itemTable = new JTable(); itemTable.addMouseListener(this); JScrollPane jsp = new JScrollPane(itemTable); jsp.setMinimumSize(new Dimension(90, 80)); jsp.setMaximumSize(new Dimension(320, 200)); jsp.setPreferredSize(new Dimension(320, 200)); rowLayout.add(jsp, 3); roleModel = new javax.swing.DefaultListModel(); roleList.setModel(roleModel); JScrollPane rsp = new JScrollPane(roleList); roleList.setCellRenderer(new CheckListRenderer()); roleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); roleList.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { int index = roleList.locationToIndex(e.getPoint()); CheckableItem item = (CheckableItem) roleList.getModel().getElementAt(index); item.setSelected(!item.isSelected()); Rectangle rect = roleList.getCellBounds(index, index); roleList.repaint(rect); } }); rowLayout.add(rsp, 3); // popup menu popmenu = new JPopupMenu(); editEntry = new JMenuItem("Edit"); editEntry.addActionListener(this); popmenu.add(editEntry); delEntry = new JMenuItem("Delete"); delEntry.addActionListener(this); popmenu.add(delEntry); cmdSave = new JButton("Save"); cmdCancel = new JButton("Cancel"); cmdSave.addActionListener(this); cmdCancel.addActionListener(this); bottomPanel.add(cmdSave); bottomPanel.add(cmdCancel); rowLayout.add(bottomPanel, 5); return panel; } public void setValues(Element node) { this.clearForm(); menuElement = node; String relPath = node.getUniquePath(); title.setText(Utils.parseNull(node.valueOf(relPath + "/title"))); actionPath.removeAllItems(); Iterator itr = node.selectNodes("//bean/name").iterator(); while (itr.hasNext()) { Element el = (Element)itr.next(); actionPath.addItem(el.getText()); } actionPath.setSelectedItem(node.valueOf(relPath + "/bean-name")); this.fillActions(); actionPath.setEditable(true); menuModel = new MenuTableModel(menuElement); itemTable.setModel(menuModel); itemTable.getColumn("Path").setCellEditor(new DefaultCellEditor(actionPath)); roleModel.clear(); List choices = menuElement.selectNodes("//security/security-role"); int n = choices.size(); CheckableItem[] items = new CheckableItem[n]; for (int i = 0; i < n; i++) { Element element = (Element) choices.get(i); items[i] = new CheckableItem(element.getText()); if (menuElement.matches(relPath + "[role='" + element.getText() + "']")) { items[i].setSelected(true); System.out.println("item matches"); } roleModel.add(i, items[i]); } } private void makeResponse() { //e.clearContent(); menuElement.element("title").setText(title.getText()); // clear role(s) and add selected items menuElement.elements("role").clear(); javax.swing.DefaultListModel model = (javax.swing.DefaultListModel) roleList.getModel(); int size = model.getSize(); for (int i = 1; i <= size; i++) { CheckableItem item = (CheckableItem) model.get(i - 1); if (item.isSelected()) { System.out.println(item.toString()); menuElement.addElement("role").setText(item.toString()); } } // clear menu items Collection emptys = menuElement.selectNodes("//menu-item[title='']"); Iterator itr = emptys.iterator(); while (itr.hasNext()) { ((Element)itr.next()).detach(); } } public void itemStateChanged( ItemEvent event ) { if (event.getSource() == actionPath && event.getStateChange() == ItemEvent.SELECTED ) { System.out.println( "Change:" + actionPath.getSelectedItem()); String name = (String)actionPath.getSelectedItem(); fillQuery(name); } } public void actionPerformed(ActionEvent ae) { Object src = ae.getSource(); if (src == delEntry) { deleteRow(); } else if (src == cmdSave) { doSave(); } else if (src == cmdCancel) { clearForm(); } } private void fillActions() { actionList.clear(); actionPath.removeAllItems(); Iterator itr = menuElement.selectNodes("//bean/name").iterator(); while (itr.hasNext()) { Element el = (Element)itr.next(); String beanName = el.getText(); actionPath.addItem(beanName + "/add.do"); actionPath.addItem(beanName + "/list.do"); actionPath.addItem("query/" + beanName+ "/SearchByPK.do"); // do query items Iterator subItr = menuElement.selectNodes("//bean[name='"+ beanName +"']/query/name").iterator(); while (subItr.hasNext()) { Element queryEl = (Element)subItr.next(); actionPath.addItem("query/" + beanName + "/" + queryEl.getText() +".do"); } // do process items Iterator subItr2 = menuElement.selectNodes("//bean[name='"+ beanName +"']/process/name").iterator(); while (subItr2.hasNext()) { Element processEl = (Element)subItr2.next(); actionPath.addItem("process/" + beanName + "/" + processEl.getText() +".do"); } } } private void fillQuery(String name) {// queryName.removeAllItems();// queryName.addItem("SearchByPK");//// Iterator itr = menuElement.selectNodes("//bean[name='" + name + "']/query/name").iterator();//// while (itr.hasNext()) {// Element el = (Element)itr.next();// queryName.addItem(el.getText());// } } //{{{ deleteRow() method private void deleteRow() { // Deletes a row from the Table: int targetRow; String keyCol; if (itemTable.getSelectedRowCount() > 0) { targetRow = itemTable.getSelectedRow(); keyCol = (String) itemTable.getValueAt(targetRow, 0); menuModel.requestRefresh(); } } //}}} private void clearForm() { title.setText(""); actionPath.setSelectedIndex(-1); } public void doSave() { this.makeResponse(); cm.saveChanges(); System.out.println(this.Title + " Saved"); } //{{{ Mouse Listener Interface Implementation private void handleMouseEvent(MouseEvent evt) { if (evt.isPopupTrigger()) { if (popmenu.isVisible()) { popmenu.setVisible(false); } else { popmenu.show((Component) evt.getSource(), evt.getX(), evt.getY()); } } } public void mousePressed(MouseEvent evt) { handleMouseEvent(evt); } public void mouseReleased(MouseEvent evt) { handleMouseEvent(evt); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } private JPanel refPanel; private JTextField title; private JComboBox actionPath; private JTable itemTable; private MenuTableModel menuModel; final JList roleList = new JList(); DefaultListModel roleModel; List actionList; JPopupMenu popmenu; JMenuItem delEntry; JMenuItem editEntry; private JButton cmdSave; private JButton cmdCancel; private ConfigManager cm; private Element menuElement;}class MenuTableModel extends AbstractTableModel { /** * Constructs an AppList table model. * @param _menus the Element the Represents a menu Object */ public MenuTableModel(Element _menus) { menu = _menus; relPath = menu.getUniquePath(); if (getRowCount() < 1) addMenuItem("", ""); //Add empty item for Data entry } public int getRowCount() { return menu.selectNodes(relPath + "/menu-item").size(); } public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } public void requestRefresh() { /* Used to refresh the table */ super.fireTableDataChanged(); } public int getColumnCount() { return 2; } public void addMenuItem(String newTitle, String newPath) { Element item = menu.addElement("menu-item"); item.addElement("title").setText(newTitle); item.addElement("path").setText(newPath); } public Object getValueAt(int r, int c) { Element el = (Element)menu.selectNodes(relPath + "/menu-item").get(r); switch (c) { case 0: return el.elementText("title"); case 1: return el.elementText("path"); } return el.getText(); } public void setValueAt(Object aValue, int r, int c) { List list = menu.selectNodes(relPath + "/menu-item"); if (((String)aValue).length() == 0 && r != list.size() - 1) { Element e = (Element)list.get(r); e.detach(); fireTableRowsDeleted(r,r); } Element el = (Element)list.get(r); switch (c) { case 0: el.element("title").setText((String)aValue); break; case 1: el.element("path").setText((String)aValue); break; } // el.setText((String)aValue); if (r == list.size() - 1) { this.addMenuItem("", ""); fireTableRowsInserted(r + 1, r + 1); } } public String getColumnName(int c) { switch (c) { case 0: return "Title"; case 1: return "Path"; } return "no value dude"; } private Element menu; String relPath = "";}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -