/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package vue.terminal; import controller.terminal.controller.TerminalReturnController; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.LayoutManager; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; /** * * @author Valentin SEITZ */ class TerminalReturnBikesPanel extends JPanel { //Content private List<TerminalReturnBikePanel> bikePanels; private Vector<Integer> rentedBikeSerialNumbers; public TerminalReturnBikesPanel(LayoutManager lm, boolean bln) { super(lm, bln); this.initialize(); } public TerminalReturnBikesPanel(LayoutManager lm) { super(lm); this.initialize(); } public TerminalReturnBikesPanel(boolean bln) { super(bln); this.initialize(); } public TerminalReturnBikesPanel() { this.initialize(); } private void initialize() { this.bikePanels = new ArrayList<>(); this.rentedBikeSerialNumbers = new Vector<>(); } public void setBikeQuantity(int quantity) { GridBagLayout gbl; int[] rowHeights; double[] rowWeights; GridBagConstraints gbc; TerminalReturnBikePanel bikePanel; {//Remove old panels for (TerminalReturnBikePanel panel : this.bikePanels) { //From GUI this.remove(panel); } //From panel list this.bikePanels.clear(); } this.rentedBikeSerialNumbers.clear(); this.rentedBikeSerialNumbers.addAll(TerminalReturnController.getTerminalReturnController().getRentedBikeSerialNumbers()); {//Add new Panels //One panel per line gbl = new GridBagLayout(); {//Layout settings gbl.columnWidths = new int[]{0, 0}; gbl.columnWeights = new double[]{1.0, Double.MIN_VALUE}; {//Rows rowHeights = new int[quantity + 1]; rowWeights = new double[quantity + 1]; for (int i = 0; i < quantity; i++) { rowHeights[i] = TerminalMainFrame.ROW_HEIGHT; rowWeights[i] = 0.0; } rowHeights[quantity] = 0; rowWeights[quantity] = Double.MIN_VALUE; gbl.rowHeights = rowHeights; gbl.rowWeights = rowWeights; } } this.setLayout(gbl); //As many panels as specified quantity for (int i = 0; i < quantity; i++) { bikePanel = new TerminalReturnBikePanel(i); {//Constraints gbc = new GridBagConstraints(); gbc.insets = new Insets(0, 0, TerminalMainFrame.VERTICAL_GAP, 0); gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 0; gbc.gridy = i; } //Add to panel list this.add(bikePanel, gbc); //Add to GUI this.bikePanels.add(bikePanel); } } this.validate(); } public int getBikeQuantity() { return this.bikePanels.size(); } public Set<Integer> getBikeSerialNumbers() { Set<Integer> result; result = new HashSet<>(); for (TerminalReturnBikePanel bikePanel : this.bikePanels) { result.add(bikePanel.getBikeSerialNumber()); } return result; } private class TerminalReturnBikePanel extends JPanel { private int bikeIndex; private JComboBox comboBikeSerialNumber; public TerminalReturnBikePanel(int bikeRank, LayoutManager lm, boolean bln) { super(lm, bln); this.initialize(bikeRank); } public TerminalReturnBikePanel(int bikeRank, LayoutManager lm) { super(lm); this.initialize(bikeRank); } public TerminalReturnBikePanel(int bikeRank, boolean bln) { super(bln); this.initialize(bikeRank); } public TerminalReturnBikePanel(int bikeRank) { this.initialize(bikeRank); } private void initialize(int bikeIndex) { GridBagConstraints gbc; this.bikeIndex = bikeIndex; GridBagLayout gbl = new GridBagLayout(); { gbl.columnWidths = new int[]{0, 0, 0}; gbl.rowHeights = new int[]{0, 0}; gbl.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE}; gbl.rowWeights = new double[]{1.0, Double.MIN_VALUE}; } setLayout(gbl); JLabel lblBikeNumber = new JLabel("Vélo " + (this.bikeIndex + 1) + ", N\u00B0 de série : "); {//Position gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.VERTICAL; gbc.insets = new Insets(0, TerminalMainFrame.HORIZONTAL_GAP, 0, TerminalMainFrame.HORIZONTAL_GAP); gbc.anchor = GridBagConstraints.EAST; gbc.gridx = 0; gbc.gridy = 0; } this.add(lblBikeNumber, gbc); this.comboBikeSerialNumber = new JComboBox(); { lblBikeNumber.setLabelFor(this.comboBikeSerialNumber); this.comboBikeSerialNumber.setModel(new DefaultComboBoxModel(rentedBikeSerialNumbers)); {//Position gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 1; gbc.gridy = 0; } } this.add(comboBikeSerialNumber, gbc); } public Integer getBikeSerialNumber() { Integer result; result = ((Integer) this.comboBikeSerialNumber.getSelectedItem()); return result; } } }