Skip to content
Snippets Groups Projects
Commit 69ce6f18 authored by Patrik Michal Vlcek's avatar Patrik Michal Vlcek
Browse files

refactoring, moved panel views into separate files, added generic generator of paneViews

parent 92a172d0
No related branches found
No related tags found
No related merge requests found
Pipeline #
package cz.muni.fi.pv168.project.ui.ViewBar;
import cz.muni.fi.pv168.project.data.Category;
import cz.muni.fi.pv168.project.ui.main.statistic.CategoryStatistic;
import cz.muni.fi.pv168.project.ui.main.statistic.StatisticsTable;
import javax.swing.JScrollPane;
import java.awt.Color;
import java.util.Arrays;
import java.util.List;
public class StatisticsPanel extends JScrollPane {
private static final List<CategoryStatistic> statisticsSampleData = Arrays.asList(
new CategoryStatistic(new Category("Work", Color.RED), 236),
new CategoryStatistic(new Category("Partner", Color.BLUE), 36),
new CategoryStatistic(new Category("School", Color.GREEN), 23676));
public StatisticsPanel() {
super(new StatisticsTable(statisticsSampleData));
}
}
package cz.muni.fi.pv168.project.ui.ViewBar;
import cz.muni.fi.pv168.project.ui.main.TaskList;
import javax.swing.JScrollPane;
public class TasksPanel extends JScrollPane {
public TasksPanel() {
// TODO MileStone 2 connect to real database
super(new TaskList());
}
}
package cz.muni.fi.pv168.project.ui.ViewBar;
import java.util.Locale;
public enum ViewBarInstances {
TASKS(TasksPanel.class),
STATISTICS(StatisticsPanel.class);
private final Class<?> type;
ViewBarInstances(Class<?> type) {
this.type = type;
}
public Class<?> getType() {
return this.type;
}
@Override
public String toString() {
String value = this.name().replace("_", " ");
return value.charAt(0) + value.substring(1).toLowerCase(Locale.ROOT);
}
}
package cz.muni.fi.pv168.project.ui.main;
import cz.muni.fi.pv168.project.data.Category;
import cz.muni.fi.pv168.project.ui.main.statistic.CategoryStatistic;
import cz.muni.fi.pv168.project.ui.main.statistic.StatisticsTable;
import cz.muni.fi.pv168.project.ui.ViewBar.TasksPanel;
import cz.muni.fi.pv168.project.ui.ViewBar.ViewBarInstances;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.EtchedBorder;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Arrays;
import java.util.List;
@SuppressWarnings({"Indentation", "CommentsIndentation"}) // JComponent hierarchy
public class MainWindow {
private JFrame mainFrame;
private JPanel mainPanel;
private JToolBar mainToolBar;
private JButton addTaskButton;
private JButton addCategoryButton;
private JButton removeTaskButton;
private JButton removeCategoryButton;
private JButton editTaskButton;
private JTabbedPane tabbedPane;
private JPanel taskPanel;
private TaskView taskView;
private JTable categoryStatisticsTable;
// TODO milestone-02 connect with live data
private final List<CategoryStatistic> statisticsSampleData = Arrays.asList(
new CategoryStatistic(new Category("Work", Color.RED), 236),
new CategoryStatistic(new Category("Partner", Color.BLUE), 36),
new CategoryStatistic(new Category("School", Color.GREEN), 23676));
private final JFrame mainFrame;
private final JPanel mainPanel;
private final JToolBar mainToolBar;
private final JScrollPane taskPane;
private final JScrollPane statisticsPane;
private JButton addTaskButton;
private JButton addCategoryButton;
private JButton removeTaskButton;
private JButton removeCategoryButton;
private JButton editTaskButton;
private JTabbedPane tabbedPane;
public MainWindow() {
mainFrame = new JFrame();
mainPanel = new JPanel(new BorderLayout());
categoryStatisticsTable = new StatisticsTable(statisticsSampleData);
taskPane = new TasksPanel();
statisticsPane = new TasksPanel();
mainToolBar = createToolBar();
......@@ -66,22 +57,31 @@ public class MainWindow {
}
private void createTabbedPane() {
taskView = new TaskView();
tabbedPane = new JTabbedPane();
tabbedPane.setBorder(new EtchedBorder());
tabbedPane.add(new JScrollPane(taskView));
tabbedPane.setTabComponentAt(0, new JLabel("Tasks", SwingConstants.CENTER));
tabbedPane.add(new JScrollPane(categoryStatisticsTable));
tabbedPane.setTabComponentAt(1, new JLabel("Statistics", SwingConstants.CENTER));
int index = 0;
for (var instance : ViewBarInstances.values()
) {
final JComponent component;
try {
component = (JScrollPane) instance.getType().getConstructor().newInstance();
} catch (Exception e) {
// TODO make it more robust and handle the exception properly
System.out.print(String.format("Error creating [%s] component", instance.toString()));
continue;
}
tabbedPane.add((component));
tabbedPane.setTabComponentAt(index, new JLabel(instance.toString(), SwingConstants.CENTER));
index += 1;
}
// make tabs span (nearly) the whole width of the window
tabbedPane.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
for (int i = 0; i < 2; i++) {
for (int i = 0; i < ViewBarInstances.values().length; i++) {
JLabel tab = (JLabel) tabbedPane.getTabComponentAt(i);
Dimension newDimension = new Dimension(tabbedPane.getWidth() / 2 - 30, tab.getFontMetrics(tab.getFont()).getHeight());
Dimension newDimension = new Dimension(tabbedPane.getWidth() / ViewBarInstances.values().length - 30, tab.getFontMetrics(tab.getFont()).getHeight());
// setting only one doesn't work when maximizing
tab.setPreferredSize(newDimension);
tab.setSize(newDimension);
......
package cz.muni.fi.pv168.project.testingData;
import cz.muni.fi.pv168.project.data.Category;
import cz.muni.fi.pv168.project.ui.main.statistic.CategoryStatistic;
import java.awt.Color;
import java.util.Arrays;
import java.util.List;
public class TestingDataSet {
private static final List<CategoryStatistic> statisticsSampleData = Arrays.asList(
new CategoryStatistic(new Category("Work", Color.RED), 236),
new CategoryStatistic(new Category("Partner", Color.BLUE), 36),
new CategoryStatistic(new Category("School", Color.GREEN), 23676));
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment