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

📄 xurlcombobox.java

📁 XBrowser是一个完全免费并且开源的Web浏览器
💻 JAVA
字号:
/****************************************************************
*              XBrowser  -  eXtended web Browser                *
*                                                               *
*           Copyright (c) 2000-2001  Armond Avanes              *
*     Refer to ReadMe & License files for more information      *
*                                                               *
*                                                               *
*                      By: Armond Avanes                        *
*       Armond555@yahoo.com     &    Armond333@yahoo.com        *
*                http://xbrowser.sourceforge.net/               *
*****************************************************************/
package xbrowser.widgets;

import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.util.*;
import java.beans.*;

import xbrowser.*;
import xbrowser.util.*;
import xbrowser.widgets.event.*;

public class XURLComboBox extends JComboBox implements FocusListener, ItemListener, KeyListener, MouseListener
{
    public XURLComboBox()
    {
        super();
    	setEditable(true);

        editor = (JTextField)getEditor().getEditorComponent();
        registerListeners();

        addPropertyChangeListener( new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent e)
			{
				if( e.getPropertyName().equals("editor") && e.getNewValue()!=null )
				{
					unregisterListeners();
					editor = (JTextField)((ComboBoxEditor)e.getNewValue()).getEditorComponent();
					registerListeners();
				}
			}
		});
    }

    public void addComboBoxListener(XURLComboBoxListener listener)
    {
		if( !listeners.contains(listener) )
	    	listeners.add(listener);
	}

    public void removeComboBoxListener(XURLComboBoxListener listener)
    {
		listeners.remove(listener);
	}

    private void registerListeners()
    {
		editor.addKeyListener(this);
		editor.addFocusListener(this);
		editor.addMouseListener(this);
        addItemListener(this);
    }

    private void unregisterListeners()
    {
		editor.removeKeyListener(this);
		editor.removeFocusListener(this);
		editor.removeMouseListener(this);
        removeItemListener(this);
    }

    public void addURL(String url)
    {
		if( url==null )
			return;

        unregisterListeners();

        removeItem(url);
        insertItemAt(url, 0);
        setSelectedItem(url);

        //if( getItemCount()>MAX_MEM_LEN )
        //    removeItemAt( getItemCount()-1 );

        registerListeners();
    }

    public void setCurrentURL(String url)
    {
		if( url==null )
			return;

        unregisterListeners();
        setSelectedItem(url);
        registerListeners();
    }

    public void loadURLs(java.util.Iterator url_list, String active_url)
    {
        unregisterListeners();

		if( getItemCount()>0 )
		    removeAllItems();

		while( url_list.hasNext() )
			addItem( url_list.next() );

		if( active_url!=null && getItemCount()>0 )
			setSelectedItem(active_url);

        registerListeners();
    }

    public void removeAllURLs()
    {
		if( getItemCount()>0 )
	        removeAllItems();
    }

    public String getCurrentURL()
    {
    String sel_item = editor.getText();

        try
        {
        	new URL( sel_item );
        }
        catch( Exception e )
        {
            sel_item = XProjectConstants.DEFAULT_PROTOCOL+sel_item;
        }

       	editor.setText(sel_item);
       	return sel_item;
	}

   	private String decorateURL(KeyEvent e, String str)
   	{
	boolean alt = (e.getModifiers() & InputEvent.ALT_MASK)!=0;
	boolean ctrl = (e.getModifiers() & InputEvent.CTRL_MASK)!=0;
	boolean shft = (e.getModifiers() & InputEvent.SHIFT_MASK)!=0;
	XDomainCompletion domain_completion = XRepository.getConfiguration().getDomainCompletion(alt, ctrl, shft);
	StringBuffer url_str = new StringBuffer(str);
	String host, postfix, prefix, new_host;
	int host_start_index = -1;
	URL url = null;

		try
		{
			url = new URL( str );
		}
		catch( Exception ex )
		{
			editor.setText(str);
			return str;
		}

		host = url.getHost();
		host_start_index = str.indexOf(host);

		if( domain_completion!=null )
		{
			prefix = domain_completion.getPrefix();
			postfix = domain_completion.getPostfix();
		}
		else
		{
			prefix = "";
			postfix = "";
		}

		if( !host.startsWith(prefix) )
			new_host = prefix+host;
		else
			new_host = host;

		if( !host.endsWith(postfix) )
			new_host += postfix;

		url_str.replace( host_start_index, host_start_index+host.length(), new_host );
		str = url_str.toString();

       	editor.setText(str);
       	return str;
	}

   	public void keyPressed(KeyEvent e)
    {
        if( e.getKeyCode()==KeyEvent.VK_ENTER )
        {
        String url = decorateURL(e, getCurrentURL());

            addURL(url);

	    Iterator it = listeners.iterator();

	    	while( it.hasNext() )
	    		((XURLComboBoxListener)it.next()).urlActivated(url);
	    }
    }

   	public void keyReleased(KeyEvent e)
    {
    char ch = e.getKeyChar();

        if( ch==KeyEvent.CHAR_UNDEFINED || Character.isISOControl(ch) )
            return;

    int pos = editor.getCaretPosition();
    String str = editor.getText();

        if( str.length()==0 )
            return;

    String complete_url = XRepository.getHistoryManager().getCompleteURL(str);

        if( complete_url!=null )
        {
			editor.setText(complete_url);
			editor.setCaretPosition(complete_url.length());
			editor.moveCaretPosition(pos);
        }
    }

   	public void keyTyped(KeyEvent e) {}

   	public void itemStateChanged(ItemEvent e)
    {
        if( e.getStateChange()!=ItemEvent.SELECTED )
            return;

        if( ((DefaultComboBoxModel)getModel()).getIndexOf(getEditor().getItem())!=-1 )
        {
        String url = getCurrentURL();

            addURL(url);

	    Iterator it = listeners.iterator();

	    	while( it.hasNext() )
	    		((XURLComboBoxListener)it.next()).urlActivated(url);
	    }
    }

   	public void focusGained(FocusEvent e)
    {
        getEditor().selectAll();
    }

	public void focusLost(FocusEvent e) {}

	public void mouseClicked(MouseEvent e) {}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}

	public void mouseReleased(MouseEvent e)
	{
		if( e.isPopupTrigger() )
		{
	    Iterator it = listeners.iterator();

	    	while( it.hasNext() )
	    		((XURLComboBoxListener)it.next()).comboBoxPopupRequested(e.getX(), e.getY());
		}
	}

// Attributes:
    private static final int MAX_MEM_LEN = 30;
    private LinkedList listeners = new LinkedList();
    private JTextField editor;
}

⌨️ 快捷键说明

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