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

📄 xoptionslayout.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.screen;

import java.io.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.tree.*;
import javax.swing.event.*;

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

public class XOptionsLayout extends XDialog
{
	public XOptionsLayout()
	{
		super(true);

    	pnlOptions = new JPanel( new BorderLayout() );

		setTitle( XRepository.getResourceManager().getProperty(this, "Title") );
		getContentPane().setLayout(new BorderLayout(5,5));

		optionsTree = new XOptionsTree();

	JPanel pnl_center = new JPanel( new BorderLayout(5,5) );
	JScrollPane scr_options = new JScrollPane(optionsTree);

        scr_options.setPreferredSize( new Dimension(185,400) );
		pnlOptions.setBorder( BorderFactory.createEtchedBorder() );

		pnl_center.add(scr_options, BorderLayout.WEST);
		pnl_center.add(pnlOptions, BorderLayout.CENTER);

		getContentPane().add(pnl_center,BorderLayout.CENTER);
		getContentPane().add(getButtonsPanel(),BorderLayout.SOUTH);

        setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
        setSize( new Dimension(585,480) );
        //setResizable(false);
	}

    private JPanel getButtonsPanel()
    {
    JPanel pnl_main = new JPanel();
    JPanel pnl_buttons = new JPanel();
	JButton btn_ok = buildButton(new OKAction());

        pnl_main.setLayout(new FlowLayout());
        pnl_buttons.setLayout(new GridLayout(1,2,15,5));
        pnl_buttons.add(btn_ok);
        pnl_buttons.add(buildButton(new CancelAction()));
        pnl_main.add(pnl_buttons);

        getRootPane().setDefaultButton(btn_ok);

        return pnl_main;
	}

	protected void updateLookAndFeel()
	{
		super.updateLookAndFeel();

		optionsTree.updateLookAndFeel();
	}

	private class XOptionsTree extends JTree implements XPluginListener
	{
		public XOptionsTree()
		{
		XMutableTreeNode browserNode = new XMutableTreeNode(browserOptions);
		XMutableTreeNode root = new XMutableTreeNode(new XBrowserOptionPage());

			treeModel = new DefaultTreeModel(root);
			setModel(treeModel);
			setCellRenderer( new XTreeCellRenderer() );
			getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
			putClientProperty("JTree.lineStyle", "Angled");
			setEditable(false);
			setShowsRootHandles(true);

			treeModel.insertNodeInto(browserNode, root, root.getChildCount());
			treeModel.insertNodeInto(pluginsNode, root, root.getChildCount());

			getSelectionModel().addTreeSelectionListener( new TreeSelectionListener() {
				public void valueChanged(TreeSelectionEvent e)
				{
				TreePath tree_path = e.getNewLeadSelectionPath();

					if( tree_path!=null )
					{
					TreeNode tree_node = (TreeNode)tree_path.getPath()[tree_path.getPath().length-1];

						if( tree_node instanceof XMutableTreeNode )
							((XMutableTreeNode)tree_node).handleSelection();
						else
							pnlOptions.removeAll();

						pnlOptions.revalidate();
						pnlOptions.repaint();
					}
				}
			});

			/*addTreeWillExpandListener( new TreeWillExpandListener() {
				public void treeWillCollapse(TreeExpansionEvent e) throws ExpandVetoException
				{
					throw new ExpandVetoException(e);
				}

				public void treeWillExpand(TreeExpansionEvent e) throws ExpandVetoException
				{
				}
			});*/

		XOptionPage page;

			pages = new LinkedList();

			pages.add( new XGeneralOptionPage() );
			pages.add( new XViewOptionPage() );
			pages.add( new XSerializerOptionPage() );
			pages.add( new XToolOptionPage() );
			pages.add( new XDomainOptionPage() );
			pages.add( new XConnectionOptionPage() );

		Iterator it = pages.iterator();

			while( it.hasNext() )
			{
				page = (XOptionPage)it.next();
				page.loadInfo();
				treeModel.insertNodeInto(new XMutableTreeNode(page), browserNode, browserNode.getChildCount());
			}

			expandRow(0);
			expandRow(1);
			setSelectionRow(2);

			setRootVisible(false);

			XRepository.getPluginManager().addPluginListener(this);
		}

		public void applyChanges()
		{
		Iterator it = pages.iterator();

			while( it.hasNext() )
				((XOptionPage)it.next()).saveInfo();
		}

		public void updateLookAndFeel()
		{
			SwingUtilities.updateComponentTreeUI(this);
			setCellRenderer( new XTreeCellRenderer() );

			if( pages!=null )
			{
			Iterator it = pages.iterator();

				while( it.hasNext() )
					SwingUtilities.updateComponentTreeUI( (XOptionPage)it.next() );
			}

			if( plugins_Nodes!=null )
			{
			Iterator it = plugins_Nodes.keySet().iterator();

				while( it.hasNext() )
					SwingUtilities.updateComponentTreeUI( ((XPluginObject)it.next()).getOptionPage() );
			}

			SwingUtilities.updateComponentTreeUI(browserOptions);
			SwingUtilities.updateComponentTreeUI(pluginsOptions);
		}

		public void pluginAdded(XPluginObject plugin)
		{
		XOptionPage option = plugin.getOptionPage();

			if( option!=null )
			{
				if( plugins_Nodes==null )
					plugins_Nodes = new HashMap();

			XMutableTreeNode node = new XMutableTreeNode(option);

				plugins_Nodes.put(plugin, node);
				treeModel.insertNodeInto(node, pluginsNode, pluginsNode.getChildCount());
			}
		}

		public void pluginRemoved(XPluginObject plugin)
		{
		XOptionPage option = plugin.getOptionPage();

			if( option!=null )
			{
			XMutableTreeNode node = (XMutableTreeNode)plugins_Nodes.remove(plugin);

				treeModel.removeNodeFromParent(node);
				setSelectionRow(0);
			}
		}

		private class XTreeCellRenderer extends DefaultTreeCellRenderer
		{
			public Icon getLeafIcon()
			{
				return currentNode.getIcon();
			}

			public Icon getOpenIcon()
			{
				return currentNode.getIcon();
			}

			public Icon getClosedIcon()
			{
				return currentNode.getIcon();
			}

			public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
			{
				currentNode = (XMutableTreeNode)value;
				return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
			}

		// Attributes:
			private XMutableTreeNode currentNode = null;
		}

		private class XMutableTreeNode extends DefaultMutableTreeNode
		{
			public XMutableTreeNode(XOptionPage page)
			{
				super( page.getName() );
				this.icon = page.getIcon();
				this.page = page;
			}

			public void handleSelection()
			{
				pnlOptions.removeAll();
				pnlOptions.add(page.getTitleComponent(), BorderLayout.NORTH);
				pnlOptions.add(page, BorderLayout.CENTER);
			}

			public ImageIcon getIcon()
			{
				return icon;
			}

		// Attributes:
			private ImageIcon icon;
			private XOptionPage page;
		}

		private class XBrowserOptionPage extends XOptionPage
		{
			public String getName()
			{
				return XProjectConstants.PRODUCT_NAME;
			}

			public ImageIcon getIcon()
			{
				return XOptionsLayout.this.buildImageIcon(XOptionsLayout.this, "image.XBrowser");
			}

			public void loadInfo()
			{
			}

			public void saveInfo()
			{
			}
		}

		private class XPluginsOptionPage extends XOptionPage
		{
			public String getName()
			{
				return XRepository.getResourceManager().getProperty(XOptionsLayout.this, "Plugins");
			}

			public ImageIcon getIcon()
			{
				return XOptionsLayout.this.buildImageIcon(XOptionsLayout.this, "image.Plugins");
			}

			public void loadInfo()
			{
			}

			public void saveInfo()
			{
			}
		}

	// Attributes:
		private LinkedList pages;
		private Map plugins_Nodes;
		private XOptionPage browserOptions = new XBrowserOptionPage();
		private XOptionPage pluginsOptions = new XPluginsOptionPage();
		private XTreeCellRenderer renderer = new XTreeCellRenderer();
		private DefaultTreeModel treeModel = null;
		private XMutableTreeNode pluginsNode = new XMutableTreeNode(pluginsOptions);
	}

    private class OKAction extends XDefaultAction
    {
        public OKAction()
        {
            super(XOptionsLayout.this, "Ok", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		    setVisible(false);
		    optionsTree.applyChanges();
        }
    }

    private class CancelAction extends XDefaultAction
    {
        public CancelAction()
        {
            super(XOptionsLayout.this, "Cancel", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		    setVisible(false);
        }
    }

// Attributes:
	private XOptionsTree optionsTree = null;
    private JPanel pnlOptions = null;
}

⌨️ 快捷键说明

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