⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guihandler.java

📁 开源的axis2框架的源码。用于开发WEBSERVER
💻 JAVA
字号:
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package sample.google.search;

import org.apache.axis2.AxisFault;
import sample.google.common.util.PropertyLoader;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;

/**
 * Build and desplay the GUI
 * implements both KeyListner and ActionListner
 * KeyListner is used to detect space or Enter key at textField
 * ActionListner is used for menu cammands
 * Thread is run to isolate the GUI from internal actions
 */
public class GUIHandler {
    private static final String HELP_FILE_NAME = "/docs/GoogleSearchHelp.html";
    /**
     * Results are desplayed here
     */
    private JEditorPane textEditorPane;

    /**
     * Query parameters typed here
     */
    private JTextField textBox;

    /**
     * Buttons clicked to view more results and backButton
     */
    private JButton nextButton
    ,
    backButton;

    /**
     * Menu commands to set the key and maximum no of results per page
     */
    private JMenuItem keyMenuItem
    ,
    maxResultsMenuItem;
    private AsynchronousClient asyncClient;

    public GUIHandler(AsynchronousClient asyncClient) {
        this.asyncClient = asyncClient;
    }

    /**
     * Build the GUI using awt and swing components
     */


    public void buildFrame() {
        JFrame frame;
        SpringLayout layout;
        JMenuBar menuBar;
        JMenu settingsMenu;
        Spring xSpring, ySpring, hSpring, wSpring;

        frame = new JFrame("Google Search");
        frame.setResizable(false);
        layout = new SpringLayout();
        Container pane = frame.getContentPane();
        pane.setLayout(layout);

        menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);
        settingsMenu = new JMenu("Settings"); // Create Set menu
        menuBar.add(settingsMenu);

        keyMenuItem = new JMenuItem("Key");
        keyMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setKey();
            }
        });
        settingsMenu.add(keyMenuItem);

        maxResultsMenuItem = new JMenuItem("Result per page");
        maxResultsMenuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                setMaxResults();
            }
        });
        settingsMenu.add(maxResultsMenuItem);
        maxResultsMenuItem.setEnabled(true);
        maxResultsMenuItem.setToolTipText(
                "You can set the maximum number of results per page, Maximum allowable is 10");

        JMenu helpMenu = new JMenu("Help");
        JMenuItem mnuItemHelp = new JMenuItem("Show Help");
        helpMenu.add(mnuItemHelp);
        mnuItemHelp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                showHelp();
            }
        });
        menuBar.add(helpMenu);

        Toolkit theKit = frame.getToolkit(); // Get the window toolkit
        Dimension wndSize = theKit.getScreenSize(); // Get screen size
        // Set the position to screen center & size to half screen size
        frame.setBounds(wndSize.width / 6, wndSize.height / 10, // Position
                wndSize.width * 3 / 5, wndSize.height * 3 / 4); // Size
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        nextButton = new JButton("More Results");
	nextButton.setEnabled(false);
        pane.add(nextButton);
        nextButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                processNextButton();
            }
        });

        backButton = new JButton("Previous Page");
        backButton.setVisible(false);
        pane.add(backButton);
        backButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                processBackButton();
            }
        });

        textEditorPane = new JEditorPane();
        textEditorPane.setEditable(false);
        textEditorPane.setContentType("text/html");
        textEditorPane.addHyperlinkListener(new LinkFollower());
        JScrollPane scroll = new JScrollPane(textEditorPane, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        pane.add(scroll);


        textBox = new JTextField();
        textBox.addKeyListener(new KeyListener() {
            public void keyPressed(KeyEvent e) {
		 if (e.getKeyCode() == 10) {
                     setButtons();
                 }
            }

            public void keyReleased(KeyEvent e) {
            }

            public void keyTyped(KeyEvent e) {
                processKeyEvent(e.getKeyChar());
            }
        });

        pane.add(textBox);

        SpringLayout.Constraints textBoxConstraints = layout.getConstraints(
                textBox);
        xSpring = Spring.constant(0); // Spring we'll use for X
        ySpring = Spring.constant(0); // Spring we'll use for Y
        wSpring = Spring.constant(frame.getBounds().width - 8); // Spring we'll use for width
        hSpring = Spring.constant(30); // Strut we?ll use for height
        textBoxConstraints.setWidth(wSpring); // Set component width constraint
        textBoxConstraints.setHeight(hSpring);
        textBoxConstraints.setX(xSpring); // Set the WEST edge constraint
        textBoxConstraints.setY(ySpring);

        SpringLayout.Constraints scrollConstraints = layout.getConstraints(
                scroll);
        xSpring = Spring.constant(0); // Spring we'll use for X
        ySpring = Spring.constant(30); // Spring we'll use for Y
        wSpring = Spring.constant(frame.getBounds().width - 8); // Spring we'll use for width
        hSpring = Spring.constant(450); // Strut we'll use for height
        scrollConstraints.setWidth(wSpring); // Set component width constraint
        scrollConstraints.setHeight(hSpring);
        scrollConstraints.setX(xSpring); // Set the WEST edge constraint
        scrollConstraints.setY(ySpring); // Set the NORTH edge constraint

        SpringLayout.Constraints backBtnConstraints = layout.getConstraints(
                backButton);
        xSpring = Spring.constant(50); // Spring we'll use for X
        ySpring = Spring.constant(480); // Spring we'll use for Y
        wSpring = Spring.constant(200); // Spring we'll use for width
        hSpring = Spring.constant(30); // Strut we'll use for height
        backBtnConstraints.setWidth(wSpring); // Set component width constraint
        backBtnConstraints.setHeight(hSpring);
        backBtnConstraints.setX(xSpring); // Set the WEST edge constraint
        backBtnConstraints.setY(ySpring);

        SpringLayout.Constraints nextBtnConstraints = layout.getConstraints(
                nextButton);
        xSpring = Spring.constant(250); // Spring we?ll use for X
        ySpring = Spring.constant(480); // Spring we?ll use for Y
        wSpring = Spring.constant(200); // Spring we?ll use for width
        hSpring = Spring.constant(30); // Strut we?ll use for height
        nextBtnConstraints.setWidth(wSpring); // Set component width constraint
        nextBtnConstraints.setHeight(hSpring);
        nextBtnConstraints.setX(xSpring); // Set the WEST edge constraint
        nextBtnConstraints.setY(ySpring);
        frame.setVisible(true);
    }

    /**
     * method showResults
     * desplay results by ClientCallbackHandler
     *
     * @param results
     */
    protected void showResults(String results) {
        textEditorPane.setText(results);
    }

    /**
     * method setKey
     * Get the key from user via an inputDialog and
     * store it in the properties file
     */
    protected void setKey() {
        String key = JOptionPane.showInputDialog(null,
                "Set the Google Key",
                PropertyLoader.getGoogleKey());
        if (key != null && key.trim().length() != 0) {
            PropertyLoader.setGoogleKey(key);
        }
    }

    private void processBackButton() {
        if (asyncClient.getStartIndex() != 0) {
            int i = Integer.parseInt(asyncClient.getMaxResults());
            asyncClient.setStartIndex(asyncClient.getStartIndex() - i);
            if (asyncClient.getStartIndex() == 0) {
                backButton.setVisible(false);
            }
            doSearch();
        }
    }

    private void setButtons() {
        nextButton.setEnabled(true);
        backButton.setVisible(false);
    }


    /**
     * method keyTyped
     * fires when user typing in TextField textBox
     * act when detects space and Enter key only
     *
     * @param event
     */
    private void processKeyEvent(int event) {
        if (event == KeyEvent.VK_SPACE || event == KeyEvent.VK_ENTER) {
            asyncClient.setSearch(textBox.getText().trim());
            if (!asyncClient.getPrevSearch().equals(asyncClient.getSearch())) {
                doSearch();
            }
        }
    }

    /**
     * method showHelp
     */
    private void showHelp() {

        JFrame frame = new JFrame();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation(screenSize.width / 5,
                screenSize.height / 5);
        frame.setSize(screenSize.width / 2, screenSize.height / 2);

        BorderLayout layout = new BorderLayout();

        JScrollPane jsp;
        JEditorPane jep;

        jep = new JEditorPane();
        jep.addHyperlinkListener(new LinkFollower());
        jep.setEditable(false);
        jep.setContentType("text/html");

        jsp = new JScrollPane(jep);

        Container contentPane = frame.getContentPane();
        contentPane.setLayout(layout);
        contentPane.add(jsp, BorderLayout.CENTER);
        String helpDoc = System.getProperty("user.dir") + HELP_FILE_NAME;

        try {
            jep.setPage(new File(helpDoc).toURL());
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null,
                    "Help file not detected",
                    "Help file error",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
        frame.setVisible(true);
    }


    private void processNextButton() {
        int i = Integer.parseInt(asyncClient.getMaxResults());
        asyncClient.setStartIndex(asyncClient.getStartIndex() + i);
        backButton.setVisible(true);
        doSearch();
    }

    private void setMaxResults() {
        String maxResults =
                JOptionPane.showInputDialog(null,
                        "Enter the number of maximum results per page (Maximum allowed is 10)",
                        asyncClient.getMaxResults());
        if (maxResults != null) {
            try {
                asyncClient.setMaxResults(Integer.toString(Integer.parseInt(maxResults)));
                asyncClient.setPrevSearch("");
            } catch (NumberFormatException e) {
                return;
            }
        }
    }


    private void doSearch() {
        new ClientThread().run();

    }

    private class ClientThread implements Runnable {
        /**
         * method run
         * check the flag doSearch
         * if it's set, call sendMsg method
         */
        public void run() {
            if (!asyncClient.getSearch().equals(asyncClient.getPrevSearch())) {
                asyncClient.setStartIndex(0);
                // return;
            }
            try {
                asyncClient.sendMsg();
            } catch (AxisFault axisFault) {
                axisFault.printStackTrace();
            }
        }
    }
}

⌨️ 快捷键说明

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