From: Sylvain Papa Date: Thu, 17 Jan 2019 15:04:51 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/master' X-Git-Url: https://git.piment-noir.org/?p=Persons_Comparator.git;a=commitdiff_plain;h=6187b5ec050a664484d54283fd2612bfaf34cea3;hp=3fc1aed88123babd636df3a0de26a4a87e472497 Merge remote-tracking branch 'origin/master' --- diff --git a/src/CSVUtils.java b/src/CSVUtils.java index 08a1ef9..d586b00 100644 --- a/src/CSVUtils.java +++ b/src/CSVUtils.java @@ -6,20 +6,20 @@ public class CSVUtils { private static final char DEFAULT_SEPARATOR = ','; private static final char DEFAULT_QUOTE = '"'; - public static List parseLine(String cvsLine) { - return parseLine(cvsLine, DEFAULT_SEPARATOR, DEFAULT_QUOTE); + public static List parseLine(String csvLine) { + return parseLine(csvLine, DEFAULT_SEPARATOR, DEFAULT_QUOTE); } - public static List parseLine(String cvsLine, char separators) { - return parseLine(cvsLine, separators, DEFAULT_QUOTE); + public static List parseLine(String csvLine, char separators) { + return parseLine(csvLine, separators, DEFAULT_QUOTE); } - public static List parseLine(String cvsLine, char separators, char customQuote) { + public static List parseLine(String csvLine, char separators, char customQuote) { List result = new ArrayList<>(); //if empty, return! - if (cvsLine == null && cvsLine.isEmpty()) { + if (csvLine == null && csvLine.isEmpty()) { return result; } @@ -36,7 +36,7 @@ public class CSVUtils { boolean startCollectChar = false; boolean doubleQuotesInColumn = false; - char[] chars = cvsLine.toCharArray(); + char[] chars = csvLine.toCharArray(); for (char ch : chars) { diff --git a/src/Eye.java b/src/Eye.java index 822e6f8..5177333 100644 --- a/src/Eye.java +++ b/src/Eye.java @@ -7,6 +7,7 @@ public class Eye { private String[] colorsList = {"black", "blue", "brown", "green"}; Eye() { + //this.color = Color.white; sortColorList(); } diff --git a/src/EyeView.java b/src/EyeView.java index 2f892e4..48ad0b5 100644 --- a/src/EyeView.java +++ b/src/EyeView.java @@ -1,7 +1,10 @@ import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; import java.util.Arrays; -public class EyeView extends JPanel { +public class EyeView extends JPanel implements ListSelectionListener { private Eye eyeObj; private JLabel label; private JList colorsList; @@ -17,6 +20,8 @@ public class EyeView extends JPanel { this.colorsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.colorsList.setLayoutOrientation(JList.VERTICAL); this.colorsList.setSelectedIndex(Arrays.asList(this.getEyeObj().getColorsList()).indexOf(this.getEyeObj().getStrColor())); + this.colorsList.setCellRenderer(new EyeCellRenderer()); + this.colorsList.addListSelectionListener(this); add(label); add(colorsList); } @@ -38,4 +43,24 @@ public class EyeView extends JPanel { public JList getColorsList() { return colorsList; } + + @Override + public void valueChanged(ListSelectionEvent listSelectionEvent) { + Eye currentEye = new Eye((String) getColorsList().getSelectedValue()); + PersonLeftPanel personLeftPanel = MainWindowsView.getInstance().getCurrentPersonView().getPersonPanel().getLeftPanel(); + personLeftPanel.drawEyes(currentEye.getColor()); + } + + private static class EyeCellRenderer extends DefaultListCellRenderer { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + Eye currentEye = new Eye((String) list.getModel().getElementAt(index)); + c.setBackground(currentEye.getColor()); + c.setForeground(Color.WHITE); + if (isSelected) { + setBackground(getBackground().darker()); + } + return c; + } + } } diff --git a/src/Main.java b/src/Main.java index a3bc099..17cf896 100644 --- a/src/Main.java +++ b/src/Main.java @@ -80,7 +80,8 @@ public class Main { //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { - MainWindowsView mainWindows = new MainWindowsView(programName, emptyPersonView); + MainWindowsView mainWindows = MainWindowsView.getInstance(); + mainWindows.setMainWindowsView(programName, emptyPersonView); mainWindows.showGUI(); } }); diff --git a/src/MainWindowsView.java b/src/MainWindowsView.java index df6839f..7037921 100644 --- a/src/MainWindowsView.java +++ b/src/MainWindowsView.java @@ -7,12 +7,18 @@ import java.awt.event.KeyEvent; import java.util.ArrayList; public class MainWindowsView extends JFrame { + private static MainWindowsView ourInstance = new MainWindowsView(); + private PersonView currentPersonView; - MainWindowsView(String title, PersonView view) { + private MainWindowsView() { + } + + public void setMainWindowsView(String title, PersonView personView) { + this.currentPersonView = personView; Container panel = getContentPane(); //Create and set up the window. setTitle(title); - setSize(view.getDimension()); + setSize(getCurrentPersonView().getDimension()); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -29,11 +35,19 @@ public class MainWindowsView extends JFrame { panel.add(component); } - panel.add(view.getNorthPanel(), BorderLayout.NORTH); - panel.add(view.getSouthPanel(), BorderLayout.SOUTH); - panel.add(view.getEastPanel(), BorderLayout.EAST); - panel.add(view.getWestPanel(), BorderLayout.WEST); - panel.add(view.getPersonPanel(), BorderLayout.CENTER); + panel.add(getCurrentPersonView().getNorthPanel(), BorderLayout.NORTH); + panel.add(getCurrentPersonView().getSouthPanel(), BorderLayout.SOUTH); + panel.add(getCurrentPersonView().getEastPanel(), BorderLayout.EAST); + panel.add(getCurrentPersonView().getWestPanel(), BorderLayout.WEST); + panel.add(getCurrentPersonView().getPersonPanel(), BorderLayout.CENTER); + } + + public static MainWindowsView getInstance() { + return ourInstance; + } + + public PersonView getCurrentPersonView() { + return currentPersonView; } /** @@ -85,7 +99,7 @@ public class MainWindowsView extends JFrame { System.out.println("Created GUI on EDT? " + SwingUtilities.isEventDispatchThread()); //Display the window. - //this.pack(); + this.pack(); this.setVisible(true); } } \ No newline at end of file diff --git a/src/PersonLeftPanel.java b/src/PersonLeftPanel.java new file mode 100644 index 0000000..d01abd0 --- /dev/null +++ b/src/PersonLeftPanel.java @@ -0,0 +1,48 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.io.IOException; + +public class PersonLeftPanel extends JPanel { + private JLabel leftLabel = new JLabel(); + private Image personImage; + + PersonLeftPanel() { + leftLabel.setText("Current person"); + add(leftLabel); + try { + this.personImage = ImageIO.read(new File("data/personImage.png")); + } catch (IOException e) { + System.out.println(e.getStackTrace()); + } + } + + private void draw(Graphics g) { + // Draw + Graphics2D g2d = (Graphics2D) g; + int imageWidth = 120; + int imageHeight = 180; + g2d.drawImage(this.personImage.getScaledInstance(imageWidth / 2, imageHeight / 2, Image.SCALE_SMOOTH), imageWidth / 4, imageHeight / 4, this); + } + + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + draw(g); + } + + //FIXME: redraw on resizing + /*@Override + public void paint(Graphics g) { + super.paint(g); + draw(g); + }*/ + + public void drawEyes(Color color) { + Graphics g = this.getGraphics(); + g.setColor(color); + g.fillOval(50, 50, 6, 3); + g.fillOval(62, 50, 6, 3); + } +} diff --git a/src/PersonPanel.java b/src/PersonPanel.java index 7c8e241..4f17945 100644 --- a/src/PersonPanel.java +++ b/src/PersonPanel.java @@ -1,59 +1,24 @@ -import javax.imageio.ImageIO; import javax.swing.*; -import java.awt.*; -import java.awt.geom.Ellipse2D; -import java.awt.geom.Point2D; -import java.io.File; -import java.io.IOException; public class PersonPanel extends JPanel { - private boolean debug = true; - private String titleText = new String(); - private JLabel personLabel = new JLabel(); - private String contentText = new String(); - private Image personImage; + private PersonLeftPanel leftPanel = new PersonLeftPanel(); + private PersonRightPanel rightPanel = new PersonRightPanel(); - public PersonPanel(String title) { - setTitleText(title); - personLabel.setText(this.getTitleText()); - add(personLabel); - try { - this.personImage = ImageIO.read(new File("data/personImage.png")); - } catch (IOException e) { - System.out.println(e.getStackTrace()); - } + public PersonPanel() { + setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); + add(leftPanel); + add(rightPanel); } - public void setTitleText(String titleText) { - this.titleText = titleText; + public void setRightContentText(String rightContentText) { + this.rightPanel.setContentText(rightContentText); } - public String getTitleText() { - return titleText; + public PersonLeftPanel getLeftPanel() { + return leftPanel; } - public void setContentText(String contentText) { - this.contentText = contentText; - } - - public String getContentText() { - return contentText; - } - - public void paintComponent(Graphics g) { - super.paintComponent(g); - - // Draw - g.setColor(Color.black); - if (debug) - // Below the JLabel - g.drawString(this.getContentText(), 5, 35); - Graphics2D g2d = (Graphics2D) g; - g2d.drawImage(this.personImage.getScaledInstance(getWidth() / 2, getHeight() / 2, Image.SCALE_SMOOTH), getWidth() / 4, getHeight() / 4, this); - } - - private static Ellipse2D getCircleByCenter(Point2D center, double radius) { - Ellipse2D.Double myCircle = new Ellipse2D.Double(center.getX() - radius, center.getY() - radius, 2 * radius, 2 * radius); - return myCircle; + public PersonRightPanel getRightPanel() { + return rightPanel; } } diff --git a/src/PersonRightPanel.java b/src/PersonRightPanel.java new file mode 100644 index 0000000..62067f6 --- /dev/null +++ b/src/PersonRightPanel.java @@ -0,0 +1,51 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.io.File; +import java.io.IOException; + +public class PersonRightPanel extends JPanel { + private JLabel rightLabel = new JLabel(); + private String contentText = new String(); + private Image personImage; + + PersonRightPanel() { + rightLabel.setText("Closest person found"); + add(rightLabel); + try { + this.personImage = ImageIO.read(new File("data/personImage.png")); + } catch (IOException e) { + System.out.println(e.getStackTrace()); + } + } + + public void setContentText(String contentText) { + this.contentText = contentText; + } + + public String getContentText() { + return contentText; + } + + //FIXME: redraw on resizing + /*@Override + public void paint(Graphics g) { + super.paint(g); + drawPerson(); + }*/ + + public void drawPerson(Person personObj) { + Graphics g = this.getGraphics(); + g.clearRect(0, 25, getWidth(), getHeight()); + + // Draw + g.drawString(getContentText(), 12, 35); + Graphics2D g2d = (Graphics2D) g; + int imageWidth = 120; + int imageHeight = 180; + g2d.drawImage(this.personImage.getScaledInstance(imageWidth / 2, imageHeight / 2, Image.SCALE_SMOOTH), imageWidth / 4, imageHeight / 4, this); + g2d.setColor(personObj.getEye().getColor()); + g2d.fillOval(50, 50, 6, 3); + g2d.fillOval(62, 50, 6, 3); + } +} diff --git a/src/PersonView.java b/src/PersonView.java index 6823579..1998cec 100644 --- a/src/PersonView.java +++ b/src/PersonView.java @@ -5,8 +5,8 @@ import java.awt.event.ActionListener; import java.util.ArrayList; public class PersonView extends JComponent implements ActionListener { - private int width = 800; - private int height = 500; + private int width = 600; + private int height = 600; private Person personObj; private ArrayList personArrayList; private FirstnameView firstnameView; @@ -18,12 +18,12 @@ public class PersonView extends JComponent implements ActionListener { private JPanel southPanel = new JPanel(); private JPanel eastPanel = new JPanel(); private JPanel westPanel = new JPanel(); - private PersonPanel personPanel = new PersonPanel("Person comparison"); + private PersonPanel personPanel = new PersonPanel(); private JButton compareButton = new JButton("Compare"); PersonView(Person personObj, ArrayList personArrayList) { setPersonObj(personObj); - setFirstnameView(new FirstnameView(15, this.personObj.getFirstname())); + setFirstnameView(new FirstnameView(14, this.personObj.getFirstname())); setOriginView(new OriginView(this.personObj.getOrigin())); setSizeView(new SizeView(this.personObj.getPersonSize())); setWeightView(new WeightView(this.personObj.getWeight())); @@ -35,12 +35,12 @@ public class PersonView extends JComponent implements ActionListener { northPanel.add(firstnameView); southPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder()); southPanel.add(compareButton); - eastPanel.setLayout(new BoxLayout(this.eastPanel, BoxLayout.Y_AXIS)); + eastPanel.setLayout(new BoxLayout(this.eastPanel, BoxLayout.PAGE_AXIS)); eastPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder()); eastPanel.add(sizeView); eastPanel.add(weightView); eastPanel.add(eyeView); - westPanel.setLayout(new BoxLayout(this.westPanel, BoxLayout.Y_AXIS)); + westPanel.setLayout(new BoxLayout(this.westPanel, BoxLayout.PAGE_AXIS)); westPanel.setBorder(BorderFactory.createRaisedSoftBevelBorder()); westPanel.add(originView); } @@ -182,7 +182,8 @@ public class PersonView extends JComponent implements ActionListener { personArrayList.sort(getPersonObj()); //Utils.displayArrayList(personArrayList); Person closestPerson = personArrayList.get(personArrayList.indexOf(this.getPersonObj()) + 1); - personPanel.setContentText(closestPerson.toString()); + personPanel.setRightContentText(closestPerson.getFirstname().getFirstname() + " at distance " + closestPerson.getDistanceFromReference()); + personPanel.getRightPanel().drawPerson(closestPerson); } } }