home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / jfc.bin / TableExample2.java < prev    next >
Text File  |  1998-02-26  |  8KB  |  234 lines

  1. /*
  2.  * @(#)TableExample2.java    1.7 98/02/04
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  *
  19.  */
  20.  
  21. /**
  22.  * A a UI around the JDBCAdaptor, allowing database data to be interactively
  23.  * fetched, sorted and displayed using Swing.
  24.  *
  25.  * NOTE: This example uses a modal dialog via the static convenience methods in
  26.  * the JOptionPane. Use of modal dialogs requires JDK 1.1.4 or greater.
  27.  *
  28.  * @version 1.7 02/04/98
  29.  * @author Philip Milne
  30.  */
  31.  
  32. import java.applet.Applet;
  33. import java.awt.*;
  34. import java.awt.event.*;
  35. import com.sun.java.swing.*;
  36. import com.sun.java.swing.table.*;
  37. import com.sun.java.swing.event.*;
  38. import com.sun.java.swing.border.*;
  39.  
  40. public class TableExample2 implements LayoutManager {
  41.     static String[] ConnectOptionNames = { "Connect" };
  42.     static String   ConnectTitle = "Connection Information";
  43.  
  44.     Dimension   origin = new Dimension(0, 0);
  45.  
  46.     JButton     fetchButton;
  47.     JButton     showConnectionInfoButton;
  48.  
  49.     JPanel      connectionPanel;
  50.     JFrame      frame; // The query/results window.
  51.  
  52.     JLabel      userNameLabel;
  53.     JTextField  userNameField;
  54.     JLabel      passwordLabel;
  55.     JTextField  passwordField;
  56.     // JLabel      queryLabel;
  57.     JTextArea   queryTextArea;
  58.     JComponent  queryAggregate;
  59.     JLabel      serverLabel;
  60.     JTextField  serverField;
  61.     JLabel      driverLabel;
  62.     JTextField  driverField;
  63.  
  64.     JPanel      mainPanel;
  65.  
  66.     TableSorter sorter;
  67.     JDBCAdapter dataBase;
  68.     JScrollPane tableAggregate;
  69.  
  70.     /**
  71.      * Brigs up a JDialog using JOptionPane containing the connectionPanel.
  72.      * If the user clicks on the 'Connect' button the connection is reset.
  73.      */
  74.     void activateConnectionDialog() {
  75.     if(JOptionPane.showOptionDialog(tableAggregate, connectionPanel, ConnectTitle,
  76.            JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,
  77.                    null, ConnectOptionNames, ConnectOptionNames[0]) == 0) {
  78.         connect();
  79.             frame.setVisible(true);
  80.     }
  81.     else if(!frame.isVisible())
  82.         System.exit(0);
  83.     }
  84.  
  85.     /**
  86.      * Creates the connectionPanel, which will contain all the fields for
  87.      * the connection information.
  88.      */
  89.     public void createConnectionDialog() {
  90.      // Create the labels and text fields.
  91.     userNameLabel = new JLabel("User name: ", JLabel.RIGHT);
  92.      userNameField = new JTextField("guest");
  93.  
  94.     passwordLabel = new JLabel("Password: ", JLabel.RIGHT);
  95.     passwordField = new JTextField("trustworthy");
  96.  
  97.         serverLabel = new JLabel("Database URL: ", JLabel.RIGHT);
  98.     serverField = new JTextField("jdbc:sybase://dbtest:1455/pubs2");
  99.  
  100.     driverLabel = new JLabel("Driver: ", JLabel.RIGHT);
  101.     driverField = new JTextField("connect.sybase.SybaseDriver");
  102.  
  103.  
  104.     connectionPanel = new JPanel(false);
  105.     connectionPanel.setLayout(new BoxLayout(connectionPanel,
  106.                         BoxLayout.X_AXIS));
  107.  
  108.     JPanel namePanel = new JPanel(false);
  109.     namePanel.setLayout(new GridLayout(0, 1));
  110.     namePanel.add(userNameLabel);
  111.     namePanel.add(passwordLabel);
  112.     namePanel.add(serverLabel);
  113.     namePanel.add(driverLabel);
  114.  
  115.     JPanel fieldPanel = new JPanel(false);
  116.     fieldPanel.setLayout(new GridLayout(0, 1));
  117.     fieldPanel.add(userNameField);
  118.     fieldPanel.add(passwordField);
  119.     fieldPanel.add(serverField);
  120.         fieldPanel.add(driverField);
  121.  
  122.     connectionPanel.add(namePanel);
  123.     connectionPanel.add(fieldPanel);
  124.     }
  125.  
  126.     public TableExample2() {
  127.         mainPanel = new JPanel();
  128.  
  129.         // Create the panel for the connection information
  130.     createConnectionDialog();
  131.  
  132.     // Create the buttons.
  133.     showConnectionInfoButton = new JButton("Configuration");
  134.     fetchButton = new JButton("Fetch");
  135.  
  136.         fetchButton.addActionListener(new QueryChangeListener());
  137.         showConnectionInfoButton.addActionListener(
  138.                    new ShowConnectionInfoListener());
  139.  
  140.     // Create the query text area and label.
  141.         queryTextArea = new JTextArea("SELECT * FROM titles", 25, 25);
  142.     queryAggregate = new JScrollPane(queryTextArea);
  143.         queryAggregate.setBorder(new BevelBorder(BevelBorder.LOWERED));
  144.  
  145.         // Create the table.
  146.         tableAggregate = createTable();
  147.         tableAggregate.setBorder(new BevelBorder(BevelBorder.LOWERED));
  148.  
  149.     // Add all the components to the main panel.
  150.         mainPanel.add(fetchButton);
  151.         mainPanel.add(showConnectionInfoButton);
  152.         mainPanel.add(queryAggregate);
  153.         mainPanel.add(tableAggregate);
  154.         mainPanel.setLayout(this);
  155.  
  156.         // Create a Frame and put the main panel in it.
  157.         frame = new JFrame("TableExample2");
  158.         frame.addWindowListener(new WindowAdapter() {
  159.             public void windowClosing(WindowEvent e) {System.exit(0);}});
  160.         frame.setBackground(Color.lightGray);
  161.         frame.getContentPane().add(mainPanel);
  162.         frame.pack();
  163.         frame.setVisible(false);
  164.         frame.setBounds(200, 200, 640, 480);
  165.  
  166.     activateConnectionDialog();
  167.     }
  168.  
  169.     class ShowConnectionInfoListener implements ActionListener {
  170.     public void actionPerformed(ActionEvent e) {
  171.         activateConnectionDialog();
  172.     }
  173.     }
  174.  
  175.     class QueryChangeListener implements ActionListener {
  176.     public void actionPerformed(ActionEvent e) {
  177.             fetch();
  178.     }
  179.     }
  180.  
  181.     public void connect() {
  182.        dataBase = new JDBCAdapter(
  183.             serverField.getText(),
  184.             driverField.getText(),
  185.             userNameField.getText(),
  186.             passwordField.getText());
  187.        sorter.setModel(dataBase);
  188.    }
  189.  
  190.     public void fetch() {
  191.         dataBase.executeQuery(queryTextArea.getText());
  192.     }
  193.  
  194.     public JScrollPane createTable() {
  195.         sorter = new TableSorter();
  196.  
  197.         //connect();
  198.         //fetch();
  199.  
  200.         // Create the table
  201.         JTable tableView = new JTable(sorter);
  202.  
  203.         // Install a mouse listener in the TableHeader as the sorter UI.
  204.         sorter.addMouseListenerToHeaderInTable(tableView);
  205.  
  206.         JScrollPane scrollpane = JTable.createScrollPaneForTable(tableView);
  207.  
  208.         return scrollpane;
  209.     }
  210.  
  211.     public static void main(String s[]) {
  212.         new TableExample2();
  213.     }
  214.  
  215.     public Dimension preferredLayoutSize(Container c){return origin;}
  216.     public Dimension minimumLayoutSize(Container c){return origin;}
  217.     public void addLayoutComponent(String s, Component c) {}
  218.     public void removeLayoutComponent(Component c) {}
  219.     public void layoutContainer(Container c) {
  220.         Rectangle b = c.getBounds();
  221.         int topHeight = 90;
  222.         int inset = 4;
  223.         showConnectionInfoButton.setBounds(b.width-2*inset-120, inset, 120, 25);
  224.         fetchButton.setBounds(b.width-2*inset-120, 60, 120, 25);
  225.         // queryLabel.setBounds(10, 10, 100, 25);
  226.         queryAggregate.setBounds(inset, inset, b.width-2*inset - 150, 80);
  227.         tableAggregate.setBounds(new Rectangle(inset,
  228.                                                inset + topHeight,
  229.                                                b.width-2*inset,
  230.                                                b.height-2*inset - topHeight));
  231.     }
  232.  
  233. }
  234.