package org.seqcode.projects.seqview.components; import java.util.*; import java.awt.*; import javax.swing.*; public class HashtableConfigurationPanel extends JPanel { public static String configuringKey = ".configuring"; private Hashtable<String,Object> table; private java.util.List<String> order; private Hashtable<String,JTextField> textfields, doublefields, integerfields; private Hashtable<String,JColorChooser> colorfields; private Hashtable<String,JCheckBox> checkfields; public HashtableConfigurationPanel(Hashtable<String,Object> table) { super(); this.table = table; this.order = null; } public HashtableConfigurationPanel(Hashtable<String,Object> table, java.util.List<String> order) { super(); this.table = table; this.order = order; } public void init() { textfields = new Hashtable<String,JTextField>(); checkfields = new Hashtable<String,JCheckBox>(); colorfields = new Hashtable<String,JColorChooser>(); doublefields = new Hashtable<String,JTextField>(); integerfields = new Hashtable<String,JTextField>(); java.util.List<String> keys; if (order == null) { keys = new ArrayList<String>(); keys.addAll(table.keySet()); Collections.sort(keys); } else { keys = order; for (String s : table.keySet()) { if (!keys.contains(s)) { keys.add(s); } } } GridBagLayout gridbag = new GridBagLayout(); setLayout(gridbag); GridBagConstraints constraints = new GridBagConstraints(); constraints.weightx = 1.0; for (String k : keys) { if (k == configuringKey) {continue;} JLabel label = new JLabel(k); constraints.fill = GridBagConstraints.BOTH; label.setHorizontalAlignment(SwingConstants.RIGHT); constraints.gridwidth = GridBagConstraints.RELATIVE; gridbag.setConstraints(label,constraints); JComponent comp = null; add(label); if (table.get(k) instanceof String) { JTextField field = new JTextField(table.get(k).toString()); textfields.put(k,field); comp = field; } else if (table.get(k) instanceof Boolean) { JCheckBox field = new JCheckBox("",(Boolean)table.get(k)); checkfields.put(k,field); comp = field; } else if (table.get(k) instanceof Color) { Color c = (Color)table.get(k); // ColorSelection selection = // new ColorSelection(c); JColorChooser selection = new JColorChooser(c); comp = selection; colorfields.put(k,selection); } else if (table.get(k) instanceof Double) { JTextField field = new JTextField(table.get(k).toString()); comp = field; doublefields.put(k,field); } else if (table.get(k) instanceof Integer) { JTextField field = new JTextField(table.get(k).toString()); comp = field; integerfields.put(k, field); } if (comp != null) { constraints.gridwidth = GridBagConstraints.REMAINDER; gridbag.setConstraints(comp,constraints); add(comp); } } } public void parse() { for (String k : textfields.keySet()) { table.put(k,textfields.get(k).getText()); } for (String k : doublefields.keySet()) { table.put(k,Double.parseDouble(doublefields.get(k).getText())); } for (String k : integerfields.keySet()) { table.put(k,Integer.parseInt(integerfields.get(k).getText())); } for (String k : checkfields.keySet()) { table.put(k,checkfields.get(k).isSelected()); } for(String k : colorfields.keySet()) { Color c = colorfields.get(k).getColor(); if(c != null) { table.put(k,c); } } clearConfiguring(); } public void clearConfiguring() { table.remove(configuringKey); } }