querypageview.java
来自「Hibernate开发及整合应用大全 蔡雪焘编著 本书用典型的示例剖析Hiber」· Java 代码 · 共 259 行
JAVA
259 行
/* * Created on 13-08-2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */package net.sf.hibernate.console.views;import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.sql.SQLException;import java.util.Iterator;import java.util.List;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComponent;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JToolBar;import javax.swing.event.ListDataEvent;import javax.swing.event.ListDataListener;import net.sf.hibernate.console.ErrorListModel;import net.sf.hibernate.console.Start;import net.sf.hibernate.console.QueryExecutor;import net.sf.hibernate.console.QueryPage;import net.sf.hibernate.console.QueryPageModel;import net.sf.hibernate.console.SessionController;import net.sf.hibernate.console.swing.BeanTableModel;import net.sf.hibernate.HibernateException;import net.sf.hibernate.Session;/** * @author MAX * */public class QueryPageView extends AbstractSessionView { final private QueryPageModel qPages; final private QueryExecutor qe; final private ErrorListModel errorList; private final SessionController controller; private JTabbedPane pane; public QueryPageView(final QueryExecutor _qe, ErrorListModel em, final SessionController controller) { this.qe = _qe; this.errorList = em; this.controller = controller; qPages = new QueryPageModel(); pane = new JTabbedPane(); qPages.addListDataListener(new ListDataListener() { public void intervalAdded(ListDataEvent e) { contentsChanged(e); } public void intervalRemoved(ListDataEvent e) { contentsChanged(e); } boolean updating = false; public void contentsChanged(ListDataEvent e) { if(updating) return; try { updating = true; int oldIndex = pane.getSelectedIndex(); pane.removeAll(); JTable table = null; for (Iterator iter = qPages.getPages(); iter.hasNext();) { final QueryPage element = (QueryPage) iter.next(); String tabTitle = element.getID() + ":" + element.getQueryString(); JComponent comp = null; //Icon icon; List data = null; if(element.getExceptions().size() == 0) { data = element.getList(); // calling here so if an error occurs the first time it will be shown as an exception. } else { // nop } if (element.getExceptions().size() > 0) { JTextArea ta = new JTextArea(); StringBuffer str = new StringBuffer(); str.append(element.getExceptions().size() + " errors occurred while listing (and calling getPathNames).\n"); for (Iterator iterator = element.getExceptions().iterator(); iterator.hasNext();) { Throwable error = (Throwable) iterator.next(); str.append(error + "\n"); while(error != null && error.getCause()!=null && error.getCause()!=error) { error = error.getCause(); str.append(error + "\n"); } } ta.setText(str.toString()); comp = Start.createStrippedScrollPane(ta); } else { BeanTableModel btm = new BeanTableModel(); btm.setColumns(element.getPathNames()); btm.setData(data); table = new JTable(btm); final JTable fTable = table; final Action sel = Start.makeInspectAction(fTable, element.getSession()); final Action prop = makeUpdatePropertyAction(QueryPageView.this.controller,table, element.getSession()); Start.configureTableAction(table, sel, prop); JToolBar tb = new JToolBar("Query page toolbar"); final JCheckBox box = new JCheckBox("Sticky"); box.setSelected(element.isSticky()); tb.add(box); box.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { element.setSticky(box.isSelected()); } }); final JButton flush = new JButton(new AbstractAction("flush() & commit()") { public void actionPerformed(ActionEvent e) { try { element.getSession().flush(); element.getSession().connection().commit(); } catch (HibernateException e1) { errorList.addError(e1); } catch (SQLException ex) { errorList.addError(ex); } } }); tb.add(flush); //element JPanel p = new JPanel(new BorderLayout()); p.add(tb, BorderLayout.NORTH); p.add(Start.createStrippedScrollPane(table), BorderLayout.CENTER); comp = p; } pane.addTab(tabTitle, comp); } if (oldIndex < pane.getTabCount() && oldIndex >= 0) { pane.setSelectedIndex(oldIndex); } else if (pane.getTabCount() > 0) { pane.setSelectedIndex(pane.getTabCount() - 1); } } finally { updating = false; } } }); pane.addMouseListener(new MouseAdapter() { /* (non-Javadoc) * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent) */ /* (non-Javadoc) * @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent) */ public void mouseReleased(MouseEvent e) { handleMouse(e, true); } public void mouseClicked(MouseEvent e) { handleMouse(e, false); } private void handleMouse(final MouseEvent e, boolean toggleSticky) { final int i = pane.getUI().tabForCoordinate(pane, e.getX(), e.getY()); QueryPage qp = null; if (i > -1) { qp = qPages.get(i); } final QueryPage actionQP = qp; if (e.isPopupTrigger()) { JPopupMenu pop = new JPopupMenu(); Action removeTab = new AbstractAction("Remove tab") { public void actionPerformed(ActionEvent ae) { if (i != -1) { qPages.remove(i); } } }; Action hqlToEditor = new AbstractAction("Copy query into editor") { public void actionPerformed(ActionEvent ae) { if (actionQP != null) { qe.executeQuery(actionQP.getQueryString()); } } }; pop.add(hqlToEditor); pop.add(removeTab); pop.show(pane, e.getX(), e.getY()); } else if (toggleSticky && e.getButton() != MouseEvent.NOBUTTON) { /*if (actionQP != null) { actionQP.setSticky(!actionQP.isSticky()); qPages.update(i); } else { System.out.println("No QueryPage found at " + i); }*/ } } }); } public Container getContainer() { return pane; } public void queryPageCreated(QueryPage qp) { qPages.add(qp); } static AbstractAction makeUpdatePropertyAction(final SessionController controller, final JTable fTable, final Session session) { return new AbstractAction() { public void actionPerformed(ActionEvent e) { int row = fTable.getSelectedRow(); int col = fTable.getSelectedColumn(); if (row >= 0 && col >= 0) { final Object o = fTable.getModel().getValueAt(row, col); controller.selectObject(session, o); } } }; } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?