package guiAanestys; import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JLabel; import java.awt.Font; import javax.swing.BoxLayout; import javax.swing.JButton; import java.awt.Component; import javax.swing.Box; import javax.swing.JOptionPane; import javax.swing.UIManager; import valinta.Vaihtoehdot2; import valinta.Valinta; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import guiAanestys.PanelValinta.SelectionChangeListener; /** * Pieni esimerkki äänestys-ohjelmasta joka on toteutettu oliotaulukon avulla. * * @author vesal * @version 6.2.2011 */ public class SwingAanestys3 extends JFrame { /** * Testataan gui-äänestysliitymää * @param args ei käytössä */ public static void main(String[] args) { Vaihtoehdot2 valinnat = new Vaihtoehdot2(10); /* valinnat.lisaa(new Valinta('K',"Kyllä")); valinnat.lisaa(new Valinta('E',"Ei")); valinnat.lisaa(new Valinta('O',"EOS")); SwingAanestys3.aanesta(valinnat, "Onko ohjelmointi kivaa","Äänestit siis"); */ valinnat.lisaa(new Valinta('T', "Tyttö")); valinnat.lisaa(new Valinta('P', "Poika")); valinnat.lisaa(new Valinta('N', "Nainen")); valinnat.lisaa(new Valinta('M', "Mies")); SwingAanestys3.aanesta(valinnat, "Mitä sukupuolta olet","Olet siis"); } private static final long serialVersionUID = 1L; private JPanel contentPane; private final JLabel labelAihe = new JLabel("Onko ohjelmointi kivaa?"); private final JPanel panelAanestys = new JPanel(); private final JButton buttonAanesta = new JButton("\u00C4\u00E4nest\u00E4"); private final Component verticalStrut = Box.createVerticalStrut(20); private final PanelValinta panelValinta = new PanelValinta(); private final JLabel labelValittu = new JLabel(" "); private Vaihtoehdot2 vaihtoehdot; private String toteamus = "Äänestit siis"; private String[] kohteet = { "Kyllä", "Ei", "En osaa sanoa" }; private String mnemo = "KEO"; /** * Aloitetaan äänestys * @param valinnat lista valinnoista, joita voidaan tehdä * @param alkuteksti teksti joka näytetään lomakkeen yläotsikkona * @param toteamus teksti joka tulee jokaisen äänestyksen jälkeen. */ public static void aanesta(final Vaihtoehdot2 valinnat, final String alkuteksti, final String toteamus) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Throwable e) { } EventQueue.invokeLater(new Runnable() { @Override public void run() { try { SwingAanestys3 frame = new SwingAanestys3(); frame.setKohteet(valinnat, alkuteksti,toteamus); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Alusteaan lomake */ public SwingAanestys3() { setTitle("\u00C4\u00E4nestys"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 249, 334); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); labelAihe.setFont(new Font("Arial", Font.BOLD, 19)); contentPane.add(labelAihe, BorderLayout.NORTH); contentPane.add(panelAanestys, BorderLayout.WEST); panelAanestys.setBorder(new EmptyBorder(20, 20, 20, 20)); panelAanestys.setLayout(new BoxLayout(panelAanestys, BoxLayout.Y_AXIS)); panelValinta.setFont(new Font("Tahoma", Font.BOLD, 14)); panelValinta.addSelectionChangeListener(new SelectionChangeListener() { public void selectionChange(PanelValinta sender) { labelValittu.setText("Valittu: " + sender.getSelectedText()); } }); labelValittu.setAlignmentX(Component.CENTER_ALIGNMENT); panelAanestys.add(labelValittu); panelAanestys.add(panelValinta); panelAanestys.add(verticalStrut); buttonAanesta.setAlignmentX(Component.CENTER_ALIGNMENT); buttonAanesta.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { aanesta(); } }); panelAanestys.add(buttonAanesta); getRootPane().setDefaultButton(buttonAanesta); panelValinta.setKohteet(kohteet); panelValinta.setMnemonics(mnemo); } /** * Laitetaan kohteet ja tekstit. * @param valinnat lista valinnoista, joita voidaan tehdä * @param alkuteksti teksti joka näytetään lomakkeen yläotsikkona * @param toteamus teksti joka tulee jokaisen äänestyksen jälkeen. */ public void setKohteet(Vaihtoehdot2 valinnat, String alkuteksti, String toteamus) { vaihtoehdot = valinnat; labelAihe.setText(alkuteksti); this.toteamus = toteamus; kohteet = valinnat.getKohteet(); mnemo = valinnat.getKirjaimet(); panelValinta.setKohteet(kohteet); panelValinta.setMnemonics(mnemo); } /// Omat aliohjelmat private void aanesta() { // char nappain = panelValinta.getSelectedChar(); // int i = mnemo.indexOf(nappain); String kohde = ""; int i = panelValinta.getSelectedIndex(); if ( i >= 0 ) kohde = kohteet[i]; if ( vaihtoehdot == null ) { JOptionPane.showMessageDialog(null, toteamus + ": " + kohde); return; } vaihtoehdot.anna(i).lisaa(); JOptionPane.showMessageDialog(null, "" + toteamus + ": " + kohde + "" + vaihtoehdot.aanetAsHTMLTable() + ""); } }