package gui.voting; import gui.Gui; import gui.models.PollOptionsTableModel; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.table.TableRowSorter; import qora.voting.Poll; import utils.BigDecimalStringComparator; @SuppressWarnings("serial") public class PollDetailsPanel extends JPanel { private Poll poll; private JTable table; @SuppressWarnings("unchecked") public PollDetailsPanel(Poll poll) { this.poll = poll; //LAYOUT this.setLayout(new GridBagLayout()); //PADDING this.setBorder(new EmptyBorder(5, 5, 5, 5)); //LABEL GBC GridBagConstraints labelGBC = new GridBagConstraints(); labelGBC.insets = new Insets(0, 5, 5, 0); labelGBC.fill = GridBagConstraints.HORIZONTAL; labelGBC.anchor = GridBagConstraints.NORTHWEST; labelGBC.weightx = 0; labelGBC.gridx = 0; //DETAIL GBC GridBagConstraints detailGBC = new GridBagConstraints(); detailGBC.insets = new Insets(0, 5, 5, 0); detailGBC.fill = GridBagConstraints.HORIZONTAL; detailGBC.anchor = GridBagConstraints.NORTHWEST; detailGBC.weightx = 1; detailGBC.gridwidth = 2; detailGBC.gridx = 1; //LABEL CREATOR labelGBC.gridy = 1; JLabel creatorLabel = new JLabel("Creator:"); this.add(creatorLabel, labelGBC); //CREATOR detailGBC.gridy = 1; JTextField creator = new JTextField(poll.getCreator().getAddress()); creator.setEditable(false); this.add(creator, detailGBC); //LABEL NAME labelGBC.gridy = 2; JLabel nameLabel = new JLabel("Name:"); this.add(nameLabel, labelGBC); //NAME detailGBC.gridy = 2; JTextField name = new JTextField(poll.getName()); name.setEditable(false); this.add(name, detailGBC); //LABEL DESCRIPTION labelGBC.gridy = 3; JLabel descriptionLabel = new JLabel("Description:"); this.add(descriptionLabel, labelGBC); //DESCRIPTION detailGBC.gridy = 3; JTextArea txtAreaDescription = new JTextArea(poll.getDescription()); txtAreaDescription.setRows(4); txtAreaDescription.setBorder(name.getBorder()); txtAreaDescription.setEditable(false); this.add(txtAreaDescription, detailGBC); //LABEL OPTIONS labelGBC.gridy = 4; JLabel optionsLabel = new JLabel("Options:"); this.add(optionsLabel, labelGBC); //OPTIONS detailGBC.gridy = 4; PollOptionsTableModel pollOptionsTableModel = new PollOptionsTableModel(poll); table = Gui.createSortableTable(pollOptionsTableModel, 0); TableRowSorter<PollOptionsTableModel> sorter = (TableRowSorter<PollOptionsTableModel>) table.getRowSorter(); sorter.setComparator(PollOptionsTableModel.COLUMN_VOTES, new BigDecimalStringComparator()); this.add(new JScrollPane(table), detailGBC); //ADD EXCHANGE BUTTON detailGBC.gridy = 5; JButton allButton = new JButton("Vote"); allButton.setPreferredSize(new Dimension(100, 25)); allButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { onVoteClick(); } }); this.add(allButton, detailGBC); //PACK this.setVisible(true); } public void onVoteClick() { //GET SELECTED OPTION int row = this.table.getSelectedRow(); if(row == -1) { row = 0; } row = this.table.convertRowIndexToModel(row); new VoteFrame(this.poll, row); } }