import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swing.*; import javax.swing.event.*; public class Terninger { private JFrame vindu; private JSpinner spinner; private JPanel terningPanel; private JButton kasteKnapp; private Random random = new Random(); private static final String[] TERNING_SIDER = { "\u2680", "\u2681", "\u2682", "\u2683", "\u2684", "\u2685", }; public Terninger() { vindu = new JFrame("Terning-kaster"); vindu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); vindu.setLayout(new BorderLayout(12, 0)); // Nord: Antall terninger JPanel antallPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); antallPanel.add(new JLabel("Antall terninger")); spinner = new JSpinner(new SpinnerNumberModel(6, 1, 6, 1)); class AntallTerninger implements ChangeListener { @Override public void stateChanged(ChangeEvent e) { oppdaterTerninger((int) spinner.getValue()); } } spinner.addChangeListener(new AntallTerninger()); antallPanel.add(spinner); vindu.add(antallPanel, BorderLayout.NORTH); // Senter: Terningene terningPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); vindu.add(terningPanel, BorderLayout.CENTER); // S?r: kasteknapp og sum JPanel kastePanel = new JPanel(new BorderLayout()); kasteKnapp = new JButton("Kast"); class KastKnapp implements ActionListener { @Override public void actionPerformed(ActionEvent e) { kastTerninger(); } } kasteKnapp.addActionListener(new KastKnapp()); kastePanel.add(kasteKnapp); vindu.add(kastePanel, BorderLayout.SOUTH); // oppdateringen oppdaterTerninger(6); vindu.pack(); vindu.setLocationRelativeTo(null); vindu.setVisible(true); } private void oppdaterTerninger(int antall) { terningPanel.removeAll(); for (int i = 0; i < antall; i++) { JLabel terningSide = new JLabel(TERNING_SIDER[0]); terningSide.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 72)); terningPanel.add(terningSide); } terningPanel.revalidate(); terningPanel.repaint(); } private void kastTerninger() { int sum = 0; Component[] terninger = terningPanel.getComponents(); for (Component terning : terninger) { int kast = random.nextInt(6); sum += kast + 1; ((JLabel) terning).setText(TERNING_SIDER[kast]); } kasteKnapp.setText(String.format("Kast, sum = %d", sum)); } public static void main(String[] args) { SwingUtilities.invokeLater(Terninger::new); } }