📄 xoptionslayout.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 + -