algorithms-for-computing-li.../src/main/java/View/Panels/EvaluationPanel.java

180 lines
5.6 KiB
Java

package View.Panels;
import Model.Line;
import View.MainFrame;
import View.PlotDialog;
import java.util.Arrays;
import java.util.LinkedList;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
/**
* Created by armin on 02.08.17.
*/
public class EvaluationPanel extends JPanel{
private final MainFrame view;
private JTable table;
private JButton start;
private JRadioButton evalTypeOne; //1: Alg - N: Data
private JRadioButton evalTypeTwo; //N: Alg - 1: Data
private ButtonGroup radiobuttonGroup;
private ButtonGroup checkboxGroup;
private JCheckBox lms; //1: Alg - N: Data
private JCheckBox rm; //N: Alg - 1: Data
private JCheckBox ts; //1: Alg - N: Data
private JPanel comp;
private JPanel algorithmPanel;
private JPanel leftSidePanel;
private JPanel datasetCount;
private JComboBox<Integer> datasetCountChoice;
private JLabel datasetCountLabel;
private JSplitPane splitPane;
private DefaultTableModel model;
private JPanel buttonPanel;
private PlotDialog plotDialog;
public EvaluationPanel(MainFrame view){
super();
this.view = view;
this.setLayout(new BorderLayout());
this.setBorder(new TitledBorder("Evaluation der Algorithmen"));
init();
addComponents();
}
private void init(){
datasetCountLabel = new JLabel("Anzahl der Datensätze");
Integer[] choice = {1,2,3,4,5,6,7,8,9,10};
datasetCountChoice = new JComboBox(choice);
start = new JButton("Start");
evalTypeOne = new JRadioButton("1 Algorithmus - N Datensätze");
evalTypeTwo = new JRadioButton("N Algorithmen - 1 Datensatz");
lms = new JCheckBox ("Least Median of Squares");
rm = new JCheckBox ("Repeated Median");
ts = new JCheckBox ("Theil-Sen");
radiobuttonGroup = new ButtonGroup();
checkboxGroup = new ButtonGroup();
buttonPanel = new JPanel(new FlowLayout());
leftSidePanel = new JPanel(new BorderLayout());
comp = new JPanel(new GridLayout(0,1));
plotDialog = new PlotDialog();
model = new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
table = new JTable(model);
splitPane = new JSplitPane();
algorithmPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
datasetCount = new JPanel(new FlowLayout(FlowLayout.LEFT));
}
private void addComponents(){
evalTypeOne.setSelected(true);
checkboxGroup.add(lms);
checkboxGroup.add(rm);
checkboxGroup.add(ts);
evalTypeOne.addActionListener(e -> {
checkboxGroup.add(lms);
checkboxGroup.add(rm);
checkboxGroup.add(ts);
});
evalTypeTwo.addActionListener(e -> {
checkboxGroup.remove(lms);
checkboxGroup.remove(rm);
checkboxGroup.remove(ts);
});
radiobuttonGroup.add(evalTypeOne);
radiobuttonGroup.add(evalTypeTwo);
buttonPanel.add(start);
algorithmPanel.add(lms);
algorithmPanel.add(rm);
algorithmPanel.add(ts);
datasetCount.add(datasetCountLabel);
datasetCount.add(datasetCountChoice);
comp.add(evalTypeOne);
comp.add(evalTypeTwo);
comp.add(algorithmPanel);
comp.add(datasetCount);
start.addActionListener(e -> {
view.getPresenter().startEvaluation();
});
comp.setBorder(new TitledBorder("Konfiguration"));
//Tabelle
String[] selections = { "Approximationsgüte","Theil-Sen", "Repeated-Median", "Least Median of Squares"};
model.setColumnIdentifiers(selections);
table.setDragEnabled(true);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setWheelScrollingEnabled(true);
scrollPane.setBorder(new TitledBorder("Ergebnisse"));
//Plot
plotDialog.createPlot(new LinkedList<>());
plotDialog.setBorder(new TitledBorder("Plot"));
leftSidePanel.add(comp, BorderLayout.NORTH);
leftSidePanel.add(scrollPane, BorderLayout.CENTER);
//Splitpane
splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setResizeWeight(.5d);
splitPane.setContinuousLayout(true);
splitPane.setLeftComponent(leftSidePanel);
splitPane.setRightComponent(plotDialog);
this.add(splitPane, BorderLayout.CENTER);
this.add(buttonPanel, BorderLayout.SOUTH);
}
public void appendData(Object[] row){
model.addRow(row);
this.repaint();
this.revalidate();
}
public void drawLines(Object[] results){
String[] castedResults = Arrays.copyOf(results, results.length, String[].class);
Paint[] color = {Color.ORANGE,Color.ORANGE, Color.RED,Color.RED, Color.MAGENTA,Color.MAGENTA};
String[] name = {"LMS","", "RM","", "TS"};
for (int i=0;i<6;i=i+2){
Double m = Double.parseDouble(castedResults[i]);
Double b = Double.parseDouble(castedResults[i+1]);
plotDialog.addLineToPlot(m,b,color[i],name[i]);
}
}
public void setDualPoints(LinkedList<Line> points){
plotDialog = new PlotDialog();
plotDialog.setBorder(new TitledBorder("Plot"));
splitPane.setRightComponent(plotDialog);
plotDialog.createPlot(points);
plotDialog.repaint();
plotDialog.revalidate();
}
}