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

📄 settingsdialog.java

📁 Java version of ABC/HR comparator v0.5. by schnofler. Runs on Sun JRE 1.5 or later
💻 JAVA
字号:
package abchr.settings;

import guiutils.LineLayout;

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

public class SettingsDialog extends JDialog implements TreeSelectionListener {
	private static class SettingsWrapper {
		public String name;
		public Settings settings;

		public SettingsWrapper(Settings settings,String name) {
			this.settings=settings;
			this.name=name;
		}

		public String toString() {
			return name;
		}
	}

	private List settingsList;

	private JTree tree;
	private JPanel centerPanel=new JPanel(new BorderLayout());
	private boolean ok=false;

	public SettingsDialog(Frame owner,List settingsList) {
		super(owner,"Settings",true);

		Container cp=getContentPane();
		cp.setLayout(new BorderLayout());
		centerPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
		cp.add(centerPanel,BorderLayout.CENTER);

		this.settingsList=new ArrayList(settingsList);

		DefaultMutableTreeNode root=new DefaultMutableTreeNode(new SettingsWrapper(null,"Settings"));
		Settings settings;
		for(Iterator it=settingsList.iterator();it.hasNext();) {
			settings=(Settings)it.next();
			String[] path=settings.getPath();
			int i=0;
			DefaultMutableTreeNode node=root;
			DefaultMutableTreeNode child;
			while((child=getNodeChild(node,path[i]))!=null){node=child;i++;}
			while(i<path.length) {
				node.add(child=new DefaultMutableTreeNode(new SettingsWrapper(null,path[i++])));
				node=child;
			}
			node.setUserObject(new SettingsWrapper(settings,path[i-1]));
		}

		tree=new JTree(root);
		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
		tree.getSelectionModel().addTreeSelectionListener(this);
		tree.setPreferredSize(new Dimension(150,200));
		cp.add(new JScrollPane(tree),BorderLayout.WEST);

		JPanel bottomPanel=new JPanel(new LineLayout(LineLayout.RIGHT_ALIGN));
		JButton applyButton=new JButton("Apply all");
		JButton cancelButton=new JButton("Cancel");
		JButton okButton=new JButton("OK");

		applyButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){applySettings();}
		});
		okButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){ok=true;hide();}
		});
		cancelButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){hide();}
		});

		bottomPanel.add(applyButton);
		bottomPanel.add(cancelButton);
		bottomPanel.add(okButton);

		cp.add(bottomPanel,BorderLayout.SOUTH);
	}

	private DefaultMutableTreeNode getNodeChild(DefaultMutableTreeNode node,Object obj) {
		Enumeration e=node.children();
		while(e.hasMoreElements()) {
			DefaultMutableTreeNode n=(DefaultMutableTreeNode)e.nextElement();
			if(n.getUserObject().equals(obj)){return n;}
		}
		return null;
	}

	public void valueChanged(TreeSelectionEvent e) {
		DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
		Settings settings=((SettingsWrapper)node.getUserObject()).settings;
		centerPanel.removeAll();
		if(settings!=null){centerPanel.add(settings.getView(),BorderLayout.CENTER);}
		centerPanel.validate();
		validate();
		centerPanel.repaint();
	}

	private void resetSettings() {
		for(int i=0;i<settingsList.size();i++) {
			((Settings)settingsList.get(i)).reset();
		}
	}

	private void applySettings() {
		for(int i=0;i<settingsList.size();i++) {
			((Settings)settingsList.get(i)).apply();
		}
	}

	public void show() {
		Window owner=this.getOwner();
		this.setSize(500,300);
		this.setLocation(owner.getX()+(owner.getWidth()-this.getWidth())/2,owner.getY()+(owner.getHeight()-this.getHeight())/2);
		resetSettings();
		ok=false;
		super.show();
		if(ok){applySettings();}
	}
}

⌨️ 快捷键说明

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