ComboBox problem
Jeg forsøger at udbygge mit lille program med en ComboBox, hvor jeg vil bestemme via valg i comboboxen hvor mange "lodsedler" mit program skal "lave"..kode:
package Lotto;
import java.util.Random;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class Lotto extends JFrame {
private JLabel antaltal, tal, klikviser, version;
private JPanel mainPanel, topPanel, indholdPanel;
private JComboBox CboxAntalSedler;
private static int klik = 0;
public Lotto() {
//Sætter nogle options på JFrame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridLayout(1,1));
setTitle("Lotto");
//setBounds(0,20,215,117);
this.setResizable(false);
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
System.out.println(e.toString());
}
//Sætter en button
JButton knap = new JButton();
knap.setText("Hent nye tal");
//knap.setMinimumSize(new Dimension(20,20));
knap.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
knapklik(evt);
}
});
//Laver Combobox
JComboBox CboxAntalSedler = new JComboBox();
//CboxAntalSedler.setSize(100,40);
CboxAntalSedler.addItem(1);
CboxAntalSedler.addItem(2);
CboxAntalSedler.addItem(3);
CboxAntalSedler.addItem(4);
CboxAntalSedler.addItem(5);
//Laver labels
antaltal = new JLabel("");
tal = new JLabel("");
klikviser = new JLabel("");
version = new JLabel("");
//Tilføjer tekst til label
String streng3 = " Version: 0.2";
version.setText(streng3);
version.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.black));
//Sætter topPanel
JPanel topPanel = new JPanel();
topPanel.setLayout(new GridLayout(1,2));
topPanel.add(knap);
topPanel.add(CboxAntalSedler);
//Sætter indholdPanel
JPanel indholdPanel = new JPanel();
indholdPanel.setLayout(new GridLayout(4,1));
//topPanel.setBorder(BorderFactory.createLineBorder(Color.black));
indholdPanel.add(antaltal);
indholdPanel.add(tal);
indholdPanel.add(klikviser);
indholdPanel.add(version);
//Sætter mainPanel
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.setVisible(true);
mainPanel.add(topPanel, BorderLayout.NORTH);
mainPanel.add(indholdPanel, BorderLayout.SOUTH);
getContentPane().add(mainPanel);
pack();
}
private void knapklik(java.awt.event.ActionEvent evt) {
List liste = talfinder();
//Tilføjer tekst til labels
String streng = " Du får " + liste.size() + " rigtige tal.";
antaltal.setText(streng);
String streng2 = " Dine lottotal: " + talstreng(liste);
tal.setText(streng2);
//tilføjer 1 til integer klik og laver den om til en string
klik++;
String kliks = String.valueOf(klik);
klikviser.setText(" Antal lottosedler: " + kliks);
//pack();
//tjekker hvor mange lottosedler er valgte
int valgteSedler = Integer.parseInt(CboxAntalSedler.getSelectedItem().toString());
if (valgteSedler > 0) {
System.out.println(valgteSedler);
}
}
public static void main(String[] args) {
Lotto f = new Lotto();
f.setVisible(true);
}
private static List talfinder() {
Random generator = new Random();
List lst = new ArrayList();
int tal = 0;
int a = 7;
//Finder 7 tal mellem 1 og 36 og fyld det på arraylisten
for (int i = 0; i < a; i++) {
int num1 = generator.nextInt(35) + 1;
//Tilføjer tal til arraylisten
if (lst.size() == 0) {
//smider det udtrukne tal "num1" i arraylisten
lst.add(num1);
} else {
//tjekker om tallet eksisterer i forvejen
if (taltjek(num1, lst) == true) {
//tallet eksisterer allerede
System.out.println("Tallet eksisterer allerede");
a++;
} else {
//tallet eksisterer ikke så vi tilføjer det
lst.add(num1);
}
}
}
Collections.sort(lst);
return lst;
}
private static boolean taltjek(int nyttal,List lst) {
//skriver tal i arraylisten ud
boolean nr = false;
int tal = 0;
System.out.println("Næste tal: " + nyttal);
for (int i = 0; i < lst.size(); i++) {
tal = Integer.parseInt(lst.get(i).toString());
if (tal == nyttal) {
nr = true;
}
}
return nr;
}
private static String talstreng(List lst) {
//skriver tal i arraylisten ud
String indexnr = "";
for (int i = 0; i < lst.size(); i++) {
if(i > 0) indexnr += ", ";
indexnr += lst.get(i);
}
return indexnr;
}
}
Programmet starter fint og kører også fint, men jeg får nogle mærkelig "fejlbeskeder" i NetBeans (4.1) + min System.out.println(antalSedler); bliver ikke skrevet ud...
Fejlbesked:
init:
deps-jar:
Compiling 1 source file to "STI"\build\classes
Note: "STI"\Lotto.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
compile:
Næste tal: 14
Næste tal: 19
Næste tal: 5
Næste tal: 7
Næste tal: 28
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Næste tal: 14
at Lotto.Lotto.knapklik(Lotto.java:104)
Tallet eksisterer allerede
Næste tal: 23
at Lotto.Lotto.access$000(Lotto.java:12)
at Lotto.Lotto$1.actionPerformed(Lotto.java:38)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
debug:
BUILD SUCCESSFUL (total time: 45 seconds)
