querypanel.java
来自「编辑视频文件」· Java 代码 · 共 215 行
JAVA
215 行
/* * File: QueryPanel.java * Project: MPI Linguistic Application * Date: 02 May 2007 * * Copyright (C) 2001-2007 Max Planck Institute for Psycholinguistics * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package mpi.search.content.query.viewer;import mpi.search.content.model.CorpusType;import mpi.search.content.query.model.AnchorConstraint;import mpi.search.content.query.model.Constraint;import mpi.search.content.query.model.ContentQuery;import mpi.search.content.query.model.DependentConstraint;import mpi.search.content.query.model.RestrictedAnchorConstraint;import mpi.search.content.result.model.ContentResult;import java.awt.BorderLayout;import java.awt.Font;import java.awt.event.MouseEvent;import javax.swing.Action;import javax.swing.JPanel;import javax.swing.JTree;import javax.swing.border.EmptyBorder;import javax.swing.event.TreeModelEvent;import javax.swing.event.TreeModelListener;import javax.swing.plaf.basic.BasicTreeUI;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.MutableTreeNode;import javax.swing.tree.TreePath;/** * $Id: QueryPanel.java,v 1.15 2007/01/30 15:06:39 klasal Exp $ The * SearchConfigPanel is the GUI for defining a complete Query. It is composed * of one or more Constraint-Panels $Author: klasal $ */public class QueryPanel extends JPanel { /** Holds value of property DOCUMENT ME! */ private final CorpusType type; /** Holds value of property DOCUMENT ME! */ private final DefaultTreeModel treeModel; /** Holds value of property DOCUMENT ME! */ private final JTree jTree; /** * Creates a new QueryPanel instance * * @param type DOCUMENT ME! * @param startAction DOCUMENT ME! */ public QueryPanel(final CorpusType type, final Action startAction) { this.type = type; treeModel = new DefaultTreeModel(new AnchorConstraint()); jTree = new JTree(treeModel) { public boolean isPathEditable(TreePath path) { return ((Constraint) path.getLastPathComponent()).isEditable(); } }; jTree.setEditable(true); jTree.setCellRenderer(new ConstraintRenderer()); jTree.setCellEditor(new ConstraintEditor(treeModel, type, startAction)); //hack to kill mouse event (otherwise they would activate subcomponents of ConstraintPanel) jTree.setUI(new BasicTreeUI() { protected boolean startEditing(TreePath path, MouseEvent event) { return super.startEditing(path, null); } }); //explicitly overwriting default height defined by Mac jTree.setRowHeight(0); jTree.setBorder(new EmptyBorder(5, 5, 5, 5)); jTree.setOpaque(false); setFont(getFont().deriveFont(Font.PLAIN)); setLayout(new BorderLayout()); add(jTree, BorderLayout.CENTER); jTree.startEditingAtPath(jTree.getPathForRow(0)); treeModel.addTreeModelListener(new TreeModelListener() { public void treeNodesInserted(final TreeModelEvent e) { try { //editing has to start after JTree has updated itself. Otherwise one gets a bad layout. javax.swing.SwingUtilities.invokeLater(new java.lang.Runnable() { public void run() { jTree.startEditingAtPath(e.getTreePath() .pathByAddingChild(e.getChildren()[0])); } }); } catch (Exception ee) { ee.printStackTrace(); } } /** * * * @param e DOCUMENT ME! */ public void treeNodesChanged(TreeModelEvent e) { } /** * * * @param e DOCUMENT ME! */ public void treeStructureChanged(TreeModelEvent e) { } /** * * * @param e DOCUMENT ME! */ public void treeNodesRemoved(TreeModelEvent e) { jTree.startEditingAtPath(e.getTreePath()); } }); } /** * Configure the panel with a previously defined Query. * * @param query DOCUMENT ME! */ public void setQuery(ContentQuery query) { jTree.stopEditing(); treeModel.setRoot(cloneTree(query.getAnchorConstraint())); for (int i = 0; i < jTree.getRowCount(); i++) { jTree.expandRow(i); } jTree.revalidate(); jTree.repaint(); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ContentQuery getQuery() { jTree.stopEditing(); return new ContentQuery((AnchorConstraint) cloneTree( (AnchorConstraint) treeModel.getRoot()), type); } /** * DOCUMENT ME! * * @param result DOCUMENT ME! * @param comment DOCUMENT ME! */ public void newRestrictedQuery(ContentResult result, String comment) { if (result.getRealSize() == 0) { return; } jTree.stopEditing(); RestrictedAnchorConstraint ac = new RestrictedAnchorConstraint(result, comment); ac.insert(new DependentConstraint(ac.getTierNames()), 0); treeModel.setRoot(ac); jTree.startEditingAtPath(jTree.getPathForRow(1)); } /** * */ public void reset() { jTree.stopEditing(); treeModel.setRoot(new AnchorConstraint()); jTree.startEditingAtPath(jTree.getPathForRow(0)); } private MutableTreeNode cloneTree(Constraint node) { Constraint newNode = (Constraint) node.clone(); for (int i = 0; i < node.getChildCount(); i++) { newNode.insert(cloneTree((Constraint) node.getChildAt(i)), i); } return newNode; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?