From e342d95bfe48e7b5ab8cd949216f974fb4f6731f Mon Sep 17 00:00:00 2001 From: Wesley Date: Mon, 23 Feb 2015 15:57:26 +0100 Subject: [PATCH] Update + added the table feest --- Artist.java | 26 ++++++- ContentTable.java | 42 +++++++++++ Data.java | 39 ++++++++++ Event.java | 61 +++++++++++++++ IO.java | 20 +++++ Stage.java | 24 ++++++ TabelPanel.java | 185 ++++++++++++++++++++++++++++++++++++++++++++++ frame.java | 88 ++++++++++++++++++++++ 8 files changed, 484 insertions(+), 1 deletion(-) create mode 100644 ContentTable.java create mode 100644 Event.java create mode 100644 TabelPanel.java create mode 100644 frame.java diff --git a/Artist.java b/Artist.java index 63bb30e..e3fa63c 100644 --- a/Artist.java +++ b/Artist.java @@ -1,4 +1,28 @@ - public class Artist { + private String name; + private String genre; + private String image; + private String description; + + + public Artist(String name, String genre, String image, String description) { + this.setName(name); + this.genre = genre; + this.image = image; + this.description = description; + } + + + public String getName() { + return name; + } + + + public void setName(String name) { + this.name = name; + } + + + } diff --git a/ContentTable.java b/ContentTable.java new file mode 100644 index 0000000..431c54b --- /dev/null +++ b/ContentTable.java @@ -0,0 +1,42 @@ +import java.awt.Graphics; + +import javax.swing.table.AbstractTableModel; + +/** + * This class is used to make a temporary abstracttableModel with selected data so later it can be passed to the JTable so it refreshes. + * @author Wesley + * @version 1.0 + */ +public class ContentTable extends AbstractTableModel { + + private static final long serialVersionUID = 1L; + + private Object[][] data; + private String[] columnNames; + + + public ContentTable(Object[][] data,String[] columnNames) { + this.data = data; + this.columnNames = columnNames; + } + + @Override + public int getColumnCount() { + return columnNames.length; + } + + @Override + public int getRowCount() { + return data.length; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + return data[rowIndex][columnIndex]; + } + + @Override + public String getColumnName(int col) { + return columnNames[col]; + } +} diff --git a/Data.java b/Data.java index 130b74d..44b0fbb 100644 --- a/Data.java +++ b/Data.java @@ -1,4 +1,43 @@ +import java.util.ArrayList; public class Data { + private ArrayList stages; + private ArrayList events; + private ArrayList artists; + + public Data() { + stages = new ArrayList<>(); + events = new ArrayList<>(); + artists = new ArrayList<>(); + } + + private void addStage(Stage stage) { + stages.add(stage); + } + + private void addEvent(Event event) { + events.add(event); + } + + private void addArtist(Artist artist) { + artists.add(artist); + } + + public void makeArtist(String name, String genre, String image, String description) { + Artist artist = new Artist(name,genre,image,description); + addArtist(artist); + } + + /*public void makeEvent(Artist artist, int startTime, int endTime, String description) { + Event event = new Event(artist, startTime, endTime,description); + addEvent(event); + } + + public void makeStage(int expectedPopularity, String description) { + Stage stage = new Stage(expectedPopularity, description); + addStage(stage); + }*/ + + } diff --git a/Event.java b/Event.java new file mode 100644 index 0000000..d1804a1 --- /dev/null +++ b/Event.java @@ -0,0 +1,61 @@ +public class Event { + + private Artist artist; + private int startTime; + private int endTime; + private String description; + private Stage stage; + private String name; + + public Event(String name, Stage stage, Artist artist, int startTime, int endTime, String description) { + if(artist != null) + this.setArtist(artist); + else + this.setArtist(null); + this.startTime = startTime; + this.setEndTime(endTime); + this.description = description; + this.setName(name); + this.stage = stage; + } + + public int getStartTime() { + return startTime; + } + + public int getEndTime() { + return endTime; + } + + public void setEndTime(int endTime) { + this.endTime = endTime; + } + + public Stage getStage() { + return stage; + } + + public void setStage(Stage stage) { + this.stage = stage; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Artist getArtist() { + return artist; + } + + public void setArtist(Artist artist) { + this.artist = artist; + } + + + + +} diff --git a/IO.java b/IO.java index f94e452..3114994 100644 --- a/IO.java +++ b/IO.java @@ -1,4 +1,24 @@ +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; public class IO { + private ObjectInputStream objectInput; + private ObjectOutputStream objectOutput; + + + public IO(File file) throws IOException { + objectInput = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file))); + objectOutput = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file))); + } + + public void saveObject(Object o) throws IOException { + objectOutput.writeObject(o); + } } diff --git a/Stage.java b/Stage.java index d29f912..94cbcb2 100644 --- a/Stage.java +++ b/Stage.java @@ -1,4 +1,28 @@ +import java.util.ArrayList; public class Stage { + private ArrayList events; + private String name; + private String description; + private int expectedPopularity; + + public Stage(String name, int expectedPopularity, String description) { + events = new ArrayList<>(); + this.setName(name); + this.expectedPopularity = expectedPopularity; + this.description = description; + } + + public void addEvent(Event event) { + events.add(event); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/TabelPanel.java b/TabelPanel.java new file mode 100644 index 0000000..34acc8a --- /dev/null +++ b/TabelPanel.java @@ -0,0 +1,185 @@ +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.table.AbstractTableModel; + +/** + * Constructs a JTable in a ScrolPane. + * @author Wesley + * @version 1.0 + */ +public class TabelPanel extends JPanel { + + private static final long serialVersionUID = 1L; + private JScrollPane scrollPane; + private Object[][] data; + private String[] columnNames = {"Stage", + "Event", + "Artist", + "Begin Time", + "End Time"}; + private ArrayList events; + private ArrayList fullEvents; + private JTable table; + private JTable selectedCell; + + /** + * Constructor makes the table and adds it to a scrollPane. + * @param events + */ + public TabelPanel(ArrayList events) { + this.events = events; + fullEvents = new ArrayList<>(); + compileData(columnNames.length,events.size()); + table= new JTable(); + AbstractTableModel tableModel = new ContentTable(data,columnNames); + table.setModel(tableModel); + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + table.setAutoCreateRowSorter(true); + table.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { if(e.getClickCount() > 1 ) cellClicked(e); else selectedCell = (JTable) e.getSource(); } + }); + scrollPane = new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + scrollPane.setBorder(null); + add(scrollPane); + } + + /** + * Sets the size of the scrollPane, in which the table is placed to fill out its container panel (not sure if this is needed?) + */ + public void paintComponent(Graphics g) { + scrollPane.setPreferredSize(new Dimension(getWidth(),getHeight())); + } + + /** + * Gets the data from the events arrayList and makes a 2D-array of it. + * @param columnes + * @param rows + */ + public void compileData(int columnes, int rows) { + data = new Object[rows][columnes]; + for(int x = 0; x < rows; x++) { + Object[] tempData = new Object[columnes]; + tempData[0] = events.get(x).getStage().getName(); + tempData[1] = events.get(x).getName(); + tempData[2] = events.get(x).getArtist().getName(); + tempData[3] = new Integer(events.get(x).getStartTime()); + tempData[4] = new Integer(events.get(x).getEndTime()); + data[x] = tempData; + } + } + + /** + * Refreshes the content on the table with a fresh ArrayList of events, useful when things are removed and added and should be called every time you update the list. + * @param events + */ + public void refreshContent(ArrayList events, boolean newList) { + this.events = events; + if(newList) + this.fullEvents = events; + compileData(columnNames.length,events.size()); + AbstractTableModel tableModel = new ContentTable(data,columnNames); + table.setModel(tableModel); + } + + /** + * Method for the action listener when a cell is clicked, opens dialog of the clicked cell. + * @param e + */ + private void cellClicked(MouseEvent e) { + JTable target = (JTable) e.getSource(); + switch(target.getSelectedColumn()) { + case 0: + //A dialog for podia? + break; + case 1: + openEventDialog(target.getSelectedRow()); + break; + case 2: + openArtistDialog(target.getSelectedRow()); + break; + } + } + + /** + * Opens a dialog with information of the selected event. + * @param row + */ + private void openEventDialog(int row) { + JFrame frame = new JFrame(); + Event event = events.get(row); + //the dialog + frame.pack(); + frame.setSize(300, 200); + frame.setLocationRelativeTo(this); + frame.setVisible(true); + } + + /** + * Opens a dialog with information of the selected artist + * @param row + */ + private void openArtistDialog(int row) { + JFrame frame = new JFrame(); + Artist artsit = events.get(row).getArtist(); + //the dialog + frame.pack(); + frame.setSize(300, 200); + frame.setLocationRelativeTo(this); + frame.setVisible(true); + } + + /** + * Filter method which filters on the currently selected cell. + * Needs to be under a button action, also a reset button is needed so list can be restored. + */ + public void filter() { + if(selectedCell != null) { + if(fullEvents.isEmpty()) { + fullEvents = events; + } + ArrayList filteredList = new ArrayList<>(); + switch(selectedCell.getSelectedColumn()) { + case 0: + for(Event event : fullEvents) { + if(event.getStage().equals(events.get(selectedCell.getSelectedRow()).getStage())) { + filteredList.add(event); + } + } + break; + case 1: + for(Event event : fullEvents) { + if(event.equals(events.get(selectedCell.getSelectedRow()))) { + filteredList.add(event); + } + } + break; + case 2: + for(Event event : fullEvents) { + if(event.getArtist().equals(events.get(selectedCell.getSelectedRow()).getArtist())) { + filteredList.add(event); + } + } + break; + + } + refreshContent(filteredList,false); + selectedCell = null; + } + else { + JOptionPane.showMessageDialog(this, "Select a cell with the value u want to filter on","No cell selected",JOptionPane.WARNING_MESSAGE); + } + } +} diff --git a/frame.java b/frame.java new file mode 100644 index 0000000..a8d7089 --- /dev/null +++ b/frame.java @@ -0,0 +1,88 @@ +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JPanel; + + +public class frame extends JFrame { + + private static final long serialVersionUID = 1L; + private ArrayList events; + private TabelPanel paneel; + + public static void main(String args[]) { + frame frameee = new frame(); + + } + + public frame() { + fillArray(); + setDefaultCloseOperation(EXIT_ON_CLOSE); + paneel = new TabelPanel(events); + getContentPane().add(paneel); + JButton button; + JPanel botPanel = new JPanel(); + button = new JButton("Filta"); + button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { paneel.filter(); } + }); + botPanel.add(button); + button = new JButton("Reset filta"); + button.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { paneel.refreshContent(events,true); } + }); + botPanel.add(button); + add(botPanel,BorderLayout.SOUTH); + pack(); + setSize(800,600); + setVisible(true); + } + + private void fillArray() { + Artist artist1 = new Artist("John","","",""); + Artist artist2 = new Artist("Jan","","",""); + Artist artist3 = new Artist("Jaap","","",""); + Artist artist4 = new Artist("Banaan","","",""); + Artist artist5 = new Artist("Josti","","",""); + Stage stage1 = new Stage("podia1",1,""); + Stage stage2 = new Stage("podia2",1,""); + Stage stage3 = new Stage("podia3",1,""); + Stage stage4 = new Stage("podia4",1,""); + Stage stage5 = new Stage("podia5",1,""); + events = new ArrayList<>(); + events.add(new Event("event1",stage1,artist1,1605,1640,"")); + events.add(new Event("event2",stage1,artist2,1605,1640,"")); + events.add(new Event("event3",stage3,artist3,1605,1640,"")); + events.add(new Event("event4",stage1,artist4,1605,1640,"")); + events.add(new Event("event5",stage5,artist5,1605,1640,"")); + } + + private void fillArray2() { + Artist artist1 = new Artist("2","","",""); + Artist artist2 = new Artist("2","","",""); + Artist artist3 = new Artist("2","","",""); + Artist artist4 = new Artist("2","","",""); + Artist artist5 = new Artist("2","","",""); + Stage stage1 = new Stage("podia1",1,""); + Stage stage2 = new Stage("podia2",1,""); + Stage stage3 = new Stage("podia3",1,""); + Stage stage4 = new Stage("podia4",1,""); + Stage stage5 = new Stage("podia5",1,""); + events = new ArrayList<>(); + events.add(new Event("event1",stage1,artist1,1605,1640,"")); + events.add(new Event("event2",stage1,artist2,1605,1640,"")); + events.add(new Event("event3",stage3,artist3,1605,1640,"")); + events.add(new Event("event4",stage4,artist4,1605,1640,"")); + events.add(new Event("event5",stage1,artist5,1605,1640,"")); + } + + public void refresh() { + fillArray2(); + paneel.refreshContent(events,true); + } + +}