1 package jp.sourceforge.stigmata.ui.swing;
3 import java.awt.BorderLayout;
4 import java.awt.Dimension;
5 import java.awt.FlowLayout;
6 import java.awt.GridLayout;
7 import java.io.IOException;
8 import java.io.PrintWriter;
10 import javax.swing.BorderFactory;
11 import javax.swing.BoxLayout;
12 import javax.swing.JButton;
13 import javax.swing.JComboBox;
14 import javax.swing.JLabel;
15 import javax.swing.JPanel;
16 import javax.swing.JScrollPane;
17 import javax.swing.JSplitPane;
18 import javax.swing.JTree;
19 import javax.swing.border.TitledBorder;
21 import jp.sourceforge.stigmata.BirthmarkSet;
22 import jp.sourceforge.stigmata.ComparisonPair;
23 import jp.sourceforge.stigmata.ComparisonPairElement;
24 import jp.sourceforge.stigmata.printer.PrinterManager;
25 import jp.sourceforge.stigmata.spi.ResultPrinterSpi;
26 import jp.sourceforge.stigmata.ui.swing.actions.SaveAction;
27 import jp.sourceforge.stigmata.utils.AsciiDataWritable;
31 * @author Haruaki TAMADA
33 public class PairComparisonPane extends JPanel{
34 private static final long serialVersionUID = 2342856785474356234L;
36 private StigmataFrame frame;
37 private ComparisonPair pair;
39 public PairComparisonPane(StigmataFrame frame, ComparisonPair pair){
46 private void initialize(StigmataFrame frame){
47 this.setLayout(new java.awt.BorderLayout());
48 this.add(getSouthPanel(frame), java.awt.BorderLayout.SOUTH);
49 this.add(getMainPane(frame), java.awt.BorderLayout.CENTER);
52 private JPanel getSouthPanel(StigmataFrame stigmata){
53 JPanel panel = new JPanel();
54 panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
55 JPanel similarityPanel = new JPanel();
56 similarityPanel.setLayout(new GridLayout(1, 3));
58 JLabel label = new JLabel(Double.toString(pair.calculateSimilarity()));
59 label.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("result.border")));
60 JComboBox combo = new JComboBox();
61 for(ComparisonPairElement elem : pair){
62 combo.addItem(new ClippedLRListCellRenderer.LRItem(elem.getType(), elem.getSimilarity()));
64 combo.setRenderer(new ClippedLRListCellRenderer(new Dimension(100, combo.getPreferredSize().height), 50));
65 combo.setBorder(BorderFactory.createTitledBorder(stigmata.getMessages().get("eachbirthmarksimilarity.border")));
66 similarityPanel.add(label);
67 similarityPanel.add(combo);
68 similarityPanel.setBorder(new TitledBorder(stigmata.getMessages().get("similarity.border")));
70 panel.add(similarityPanel);
72 JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
73 JButton saveButton = GUIUtility.createButton(
74 frame.getMessages(), "savecomparison", new SaveAction(frame, new AsciiDataWritable(){
76 public void writeAsciiData(PrintWriter out, String format) throws IOException{
77 ResultPrinterSpi service = PrinterManager.getInstance().getService(format);
79 service = PrinterManager.getDefaultFormatService();
82 service.getComparisonPairPrinter().printResult(out, pair);
87 buttonPanel.add(saveButton);
88 panel.add(buttonPanel);
93 private JSplitPane getMainPane(StigmataFrame frame){
94 JSplitPane spliter = new javax.swing.JSplitPane();
95 spliter.setLeftComponent(getSpliterPanel(frame, pair.getTarget1()));
96 spliter.setRightComponent(getSpliterPanel(frame, pair.getTarget2()));
97 spliter.setDividerLocation((spliter.getWidth() - spliter.getDividerSize()) / 2);
98 spliter.setContinuousLayout(true);
103 private JPanel getSpliterPanel(StigmataFrame stigmata, BirthmarkSet birthmark){
104 JPanel panel = new JPanel();
105 panel.setLayout(new BorderLayout());
106 JTree tree = new JTree(new BirthmarkTreeNode(birthmark));
108 panel.add(new JScrollPane(tree), BorderLayout.CENTER);
109 JPanel south = new JPanel(new BorderLayout());
110 panel.add(south, BorderLayout.SOUTH);
112 JLabel elementCount = new JLabel(Integer.toString(birthmark.getSumOfElementCount()));
113 elementCount.setBorder(new TitledBorder(stigmata.getMessages().get("elementcount.border")));
114 south.add(elementCount, BorderLayout.CENTER);