1 package jp.sourceforge.stigmata.ui.swing;
7 import java.awt.BorderLayout;
8 import java.awt.Dimension;
9 import java.awt.FlowLayout;
10 import java.awt.GridLayout;
11 import java.io.IOException;
12 import java.io.PrintWriter;
14 import javax.swing.BorderFactory;
15 import javax.swing.BoxLayout;
16 import javax.swing.JButton;
17 import javax.swing.JComboBox;
18 import javax.swing.JLabel;
19 import javax.swing.JPanel;
20 import javax.swing.JScrollPane;
21 import javax.swing.JSplitPane;
22 import javax.swing.JTree;
23 import javax.swing.border.TitledBorder;
25 import jp.sourceforge.stigmata.BirthmarkSet;
26 import jp.sourceforge.stigmata.ComparisonPair;
27 import jp.sourceforge.stigmata.ComparisonPairElement;
28 import jp.sourceforge.stigmata.printer.PrinterManager;
29 import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
30 import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
31 import jp.sourceforge.stigmata.utils.AsciiDataWritable;
35 * @author Haruaki TAMADA
38 public class PairComparisonPane extends JPanel{
39 private static final long serialVersionUID = 2342856785474356234L;
41 private StigmataFrame frame;
42 private ComparisonPair pair;
44 public PairComparisonPane(StigmataFrame frame, ComparisonPair pair){
51 private void initialize(StigmataFrame frame){
52 this.setLayout(new java.awt.BorderLayout());
53 this.add(getSouthPanel(frame), java.awt.BorderLayout.SOUTH);
54 this.add(getMainPane(frame), java.awt.BorderLayout.CENTER);
57 private JPanel getSouthPanel(StigmataFrame stigmata){
58 JPanel panel = new JPanel();
59 panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
60 JPanel similarityPanel = new JPanel();
61 similarityPanel.setLayout(new GridLayout(1, 3));
63 JLabel label = new JLabel(Double.toString(pair.calculateSimilarity()));
64 label.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("result.border")));
65 JComboBox combo = new JComboBox();
66 for(ComparisonPairElement elem : pair){
67 combo.addItem(new ClippedLRListCellRenderer.LRItem(elem.getType(), elem.getSimilarity()));
69 combo.setRenderer(new ClippedLRListCellRenderer(new Dimension(100, combo.getPreferredSize().height), 50));
70 combo.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("eachbirthmarksimilarity.border")));
71 similarityPanel.add(label);
72 similarityPanel.add(combo);
73 similarityPanel.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));
75 panel.add(similarityPanel);
77 JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
78 JButton saveButton = GUIUtility.createButton(
79 frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){
81 public void writeAsciiData(PrintWriter out, String format) throws IOException{
82 ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
84 service = PrinterManager.getDefaultFormatService();
87 service.getComparisonPairPrinter().printResult(out, pair);
92 buttonPanel.add(saveButton);
93 panel.add(buttonPanel);
98 private JSplitPane getMainPane(StigmataFrame frame){
99 JSplitPane spliter = new javax.swing.JSplitPane();
100 spliter.setLeftComponent(getSpliterPanel(frame, pair.getTarget1()));
101 spliter.setRightComponent(getSpliterPanel(frame, pair.getTarget2()));
102 spliter.setDividerLocation((spliter.getWidth() - spliter.getDividerSize()) / 2);
103 spliter.setContinuousLayout(true);
108 private JPanel getSpliterPanel(StigmataFrame stigmata, BirthmarkSet birthmark){
109 JPanel panel = new JPanel();
110 panel.setLayout(new BorderLayout());
111 JTree tree = new JTree(new BirthmarkTreeNode(birthmark));
113 panel.add(new JScrollPane(tree), BorderLayout.CENTER);
114 JPanel south = new JPanel(new BorderLayout());
115 panel.add(south, BorderLayout.SOUTH);
117 JLabel elementCount = new JLabel(Integer.toString(birthmark.getSumOfElementCount()));
118 elementCount.setBorder(new TitledBorder(stigmata.getMessages().get("elementcount.border")));
119 south.add(elementCount, BorderLayout.CENTER);