resultpanel.java

来自「Weka」· Java 代码 · 共 389 行

JAVA
389
字号
/* *    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., 675 Mass Ave, Cambridge, MA 02139, USA. *//* * ResultPanel.java * Copyright (C) 2005 University of Waikato, Hamilton, New Zealand * */package weka.gui.sql;import weka.gui.JTableHelper;import weka.gui.sql.event.QueryExecuteEvent;import weka.gui.sql.event.QueryExecuteListener;import weka.gui.sql.event.ResultChangedEvent;import weka.gui.sql.event.ResultChangedListener;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.HashSet;import java.util.Iterator;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JViewport;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;/** * Represents a panel for displaying the results of a query in table format. * * @author    FracPete (fracpete at waikato dot ac dot nz) * @version   $Revision: 1.3 $ */public class ResultPanel   extends JPanel   implements QueryExecuteListener, ChangeListener {  /** for serialization */  private static final long serialVersionUID = 278654800344034571L;    /** the parent of this panel */  protected JFrame m_Parent;  /** the result change listeners */  protected HashSet m_Listeners;  /** the panel where to output the queries */  protected QueryPanel m_QueryPanel;  /** the tabbed pane for the results */  protected JTabbedPane m_TabbedPane;  /** the close button */  protected JButton m_ButtonClose = new JButton("Close");  /** the close all button */  protected JButton m_ButtonCloseAll = new JButton("Close all");  /** the button that copies the query into the QueryPanel */  protected JButton m_ButtonCopyQuery = new JButton("Re-use query");  /** the button for the optimal column width of the current table */  protected JButton m_ButtonOptWidth = new JButton("Optimal width");  /** the counter for the tab names */  protected int m_NameCounter;    /**   * initializes the panel   * @param parent        the parent of this panel   */  public ResultPanel(JFrame parent) {    super();        m_Parent      = parent;    m_QueryPanel  = null;    m_NameCounter = 0;    m_Listeners   = new HashSet();        createPanel();  }  /**   * creates the panel with all its components   */  protected void createPanel() {    JPanel          panel;    JPanel          panel2;    JPanel          panel3;    JPanel          panel4;    setLayout(new BorderLayout());    setPreferredSize(new Dimension(0, 200));    // tabbed pane    m_TabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);    m_TabbedPane.addChangeListener(this);    add(m_TabbedPane, BorderLayout.CENTER);    // buttons    panel = new JPanel(new BorderLayout());    add(panel, BorderLayout.EAST);    panel2 = new JPanel(new BorderLayout());    panel.add(panel2, BorderLayout.CENTER);    panel3 = new JPanel(new BorderLayout());    panel2.add(panel3, BorderLayout.CENTER);    panel4 = new JPanel(new BorderLayout());    panel3.add(panel4, BorderLayout.CENTER);        m_ButtonClose.setMnemonic('l');    m_ButtonClose.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  close();	}      });    panel.add(m_ButtonClose, BorderLayout.NORTH);        m_ButtonCloseAll.setMnemonic('a');    m_ButtonCloseAll.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  closeAll();	}      });    panel2.add(m_ButtonCloseAll, BorderLayout.NORTH);        m_ButtonCopyQuery.setMnemonic('Q');    m_ButtonCopyQuery.setToolTipText("Copies the query of the currently selected tab into the query field.");    m_ButtonCopyQuery.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  copyQuery();	}      });    panel3.add(m_ButtonCopyQuery, BorderLayout.NORTH);        m_ButtonOptWidth.setMnemonic('p');    m_ButtonOptWidth.setToolTipText("Calculates the optimal column width for the current table.");    m_ButtonOptWidth.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  calcOptimalWidth();	}      });    panel4.add(m_ButtonOptWidth, BorderLayout.NORTH);    // dummy place holder, otherwise is the space too small for the tabbed    // pane    panel4.add(new JLabel(" "), BorderLayout.CENTER);    panel4.add(new JLabel(" "), BorderLayout.SOUTH);    // set the initial button state    setButtons();  }  /**   * sets the parameters back to standard   */  public void clear() {    closeAll();  }  /**   * sets the focus in a designated control   */  public void setFocus() {    m_TabbedPane.requestFocus();  }  /**   * sets the state of the buttons   */  protected void setButtons() {    int         index;    index = m_TabbedPane.getSelectedIndex();    m_ButtonClose.setEnabled(index > -1);    m_ButtonCloseAll.setEnabled(m_TabbedPane.getTabCount() > 0);    m_ButtonCopyQuery.setEnabled(index > -1);    m_ButtonOptWidth.setEnabled(index > -1);  }  /**   * returns the next name for a tab "QueryXYZ'   */  protected String getNextTabName() {    m_NameCounter++;    return "Query" + m_NameCounter;  }    /**   * This method gets called when a query has been executed.   */  public void queryExecuted(QueryExecuteEvent evt) {    ResultSetTable      table;        // only displayed successful queries    if (evt.failed())      return;    // DDL command like drop etc that don't create ResultSet?    if (!evt.hasResult())      return;    try {      table = new ResultSetTable(                evt.getDbUtils().getDatabaseURL(),                evt.getDbUtils().getUsername(),                evt.getDbUtils().getPassword(),                evt.getQuery(),                 new ResultSetTableModel(evt.getResultSet(), evt.getMaxRows()));      m_TabbedPane.addTab(getNextTabName(), new JScrollPane(table));      // set active tab      m_TabbedPane.setSelectedIndex(m_TabbedPane.getTabCount() - 1);    }    catch (Exception e) {      e.printStackTrace();    }    // set buttons    setButtons();  }  /**   * Invoked when the target of the listener has changed its state.   */  public void stateChanged(ChangeEvent e) {    // in case the tabs get clicked    setButtons();    // notify listeners about current query    if (getCurrentTable() != null)      notifyListeners(getCurrentTable().getURL(),                       getCurrentTable().getUser(),                      getCurrentTable().getPassword(),                      getCurrentTable().getQuery());  }  /**   * returns the currently set QueryPanel, can be NULL   * @return        the current QueryPanel, possibly NULL   */  public QueryPanel getQueryPanel() {    return m_QueryPanel;  }  /**   * sets the QueryPanel to use for displaying the query   * @param panel   the panel used for displaying the query   */  public void setQueryPanel(QueryPanel panel) {    m_QueryPanel = panel;  }  /**   * returns the table of the current tab, can be NULL   * @return        the currently selected table   */  protected ResultSetTable getCurrentTable() {    ResultSetTable      table;    JScrollPane         pane;    JViewport           port;    int                 index;    table = null;    index = m_TabbedPane.getSelectedIndex();    if (index > -1) {      pane  = (JScrollPane) m_TabbedPane.getComponentAt(index);      port  = (JViewport) pane.getComponent(0);      table = (ResultSetTable) port.getComponent(0);    }          return table;  }  /**   * closes the current tab   */  protected void close() {    int                 index;    index = m_TabbedPane.getSelectedIndex();    if (index > -1) {      try {        getCurrentTable().finalize();      }      catch (Throwable t) {        System.out.println(t);      }      m_TabbedPane.removeTabAt(index);    }    // set buttons    setButtons();  }  /**   * closes all tabs   */  protected void closeAll() {    while (m_TabbedPane.getTabCount() > 0) {      m_TabbedPane.setSelectedIndex(0);      try {        getCurrentTable().finalize();      }      catch (Throwable t) {        System.out.println(t);      }      m_TabbedPane.removeTabAt(0);    }    // set buttons    setButtons();  }  /**   * copies the query of the current tab into the QueryPanel   */  protected void copyQuery() {    if ( (getCurrentTable() != null) && (getQueryPanel() != null) )      getQueryPanel().setQuery(getCurrentTable().getQuery());  }  /**   * calculates the optimal column width for the current table   */  protected void calcOptimalWidth() {    if (getCurrentTable() != null)      JTableHelper.setOptimalColumnWidth(getCurrentTable());  }  /**   * adds the given listener to the list of listeners   * @param l       the listener to add to the list   */  public void addResultChangedListener(ResultChangedListener l) {    m_Listeners.add(l);  }  /**   * removes the given listener from the list of listeners   * @param l       the listener to remove   */  public void removeResultChangedListener(ResultChangedListener l) {    m_Listeners.remove(l);  }  /**   * notifies the listeners of the event   * @param url         the database URL   * @param user        the user   * @param pw          the password   * @param query       the query   */  protected void notifyListeners(String url, String user,                                  String pw, String query) {    Iterator                iter;    ResultChangedListener   l;    iter = m_Listeners.iterator();    while (iter.hasNext()) {      l = (ResultChangedListener) iter.next();      l.resultChanged(new ResultChangedEvent(this, url, user, pw, query));    }  }}

⌨️ 快捷键说明

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