Ошибка: Странно, у меня нет ошибок.Код не работает, но я не получаю сообщений об ошибках
То, что я пытаюсь сделать: (Я также добавил // сообщения, объясняет, что мой код делает.)
Что я пытаюсь сделать это довольно просто.
1) Заполните имя в JTextField, нажмите enter и имя должно появиться в JTextArea. После того, как имя находится в JTextArea, JTextField становится пустым, поэтому вы можете заполнить другое имя и так далее, должен появиться список имен в JTextArea.
2) Нажмите кнопку kiesWin, чтобы программа выбрала случайного пользователя из списка. (здесь это не так)
3) Нажмите кнопку resetL, чтобы сбросить программу, чтобы я мог создать новый список, чтобы выбрать случайного победителя.
Проблема: Когда я нажимаю кнопку Kies (Translated: Choose), он должен выбрать случайное имя из ArrayList и показать случайное имя в текстовом поле JTextField2. Но когда я нажимаю кнопку Kies, программа ничего не делает. И он должен показать мне случайное выбранное имя из ArrayList.
Это класс, который не работает должным образом: (I Think)
// This is the button that chooses a random name from the ArrayList.
// The random chosen name should appear in the JTextField textvak2. (but it doesn't)
// This is also the part where it goes wrong at the moment.
class Kies extends OnthoudNaam implements ActionListener {
public void actionPerformed(ActionEvent e) {
Random r = new Random();
if (lijst.size() > 0) {
int n = r.nextInt(lijst.size());
Naam kiesNaam = lijst.get(n);
textvak2.setText(kiesNaam.getIngevoerdNaam());
}
}
}
Ибо в случае если вам нужен весь код:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
// Main method to make the frame.
public class Loterij3 extends JFrame {
public static void main(String args[]) {
JFrame frame = new Loterij3();
frame.setExtendedState(frame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("My Lottery!");
frame.setContentPane(new Paneel());
frame.setVisible(true);
}
}
// This is the Panel that goes into the frame.
class Paneel extends JPanel {
private Boven boven;
JTextArea textvak1;
JTextField textvak2;
OnthoudNaam onthoudNaam = new OnthoudNaam();
JTextField invoervak1; // JTextField from class Boven.
public Paneel() {
setLayout(new BorderLayout()); // using border Layout.
setBackground(Color.LIGHT_GRAY);
boven = new Boven();
textvak1 = new JTextArea();
add(new JScrollPane(textvak1));
textvak1.setBackground(Color.WHITE);
textvak2 = new JTextField();
textvak2.setHorizontalAlignment(JTextField.CENTER);
add(boven, BorderLayout.NORTH); // Where the class Boven should be.
add(textvak1, BorderLayout.CENTER);
add(textvak2, BorderLayout.SOUTH);
}
// This is the class Boven (Translation up or upper).
// This is where the JButtons, JTextField and JLabels are.
public class Boven extends JPanel {
JButton kiesWin, resetL;
JLabel label1;
public Boven() {
setBackground(Color.LIGHT_GRAY);
setLayout(new GridLayout(1, 4, 100, 5)); // using GridLayout.
Border border =
BorderFactory.createEmptyBorder(10, 10, 10, 10);
setBorder(border);
kiesWin = new JButton("Kies een Winnaar!");
kiesWin.addActionListener(new Kies());
resetL = new JButton("Reset alles");
resetL.addActionListener(new Reset());
label1 = new JLabel("Voer Persoon in en druk op enter: ", JLabel.RIGHT);
invoervak1 = new JTextField(20);
invoervak1.addActionListener(new InvoerVakHandler());
add(label1);
add(invoervak1);
add(kiesWin);
add(resetL);
}
}
// The class Naam (translation = name).
// This is what the ArrayList should remember
// In other words ArrayList should remember the Names I put in the JTextField.
class Naam {
private String ingevoerdNaam;
public Naam(String ingevoerdNaam) {
this.ingevoerdNaam = ingevoerdNaam;
}
public String getIngevoerdNaam() {
return ingevoerdNaam;
}
public String toString() {
return ingevoerdNaam;
}
}
// This is my ArrayList,
// This should remember the names I type in the JTextField.
class OnthoudNaam extends JPanel {
protected ArrayList<Naam> lijst;
public OnthoudNaam() {
lijst = new ArrayList<Naam>();
}
public void voegNaamToe(Naam x) {
lijst.add(x);
}
public String toString() {
StringBuffer buffer = new StringBuffer();
for(Naam x : lijst) {
buffer.append(x);
buffer.append("\n");
}
return buffer.toString();
}
}
// This is the JTextField where I enter the names.
// The Name I fill in the JTextField should be remembered by the ArrayList.
// The Name I fill in should be put in the JTextArea.
public class InvoerVakHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
String invoer = invoervak1.getText();
Naam Naam = new Naam(invoer);
onthoudNaam.voegNaamToe(Naam);
textvak1.setText(onthoudNaam.toString());
invoervak1.setText("");
}
}
// This is the button that chooses a random name from the ArrayList.
// This is also the part where it goes wrong at the moment.
class Kies extends OnthoudNaam implements ActionListener {
public void actionPerformed(ActionEvent e) {
Random r = new Random();
if (lijst.size() > 0) {
int n = r.nextInt(lijst.size());
Naam kiesNaam = lijst.get(n);
textvak2.setText(kiesNaam.getIngevoerdNaam());
}
}
}
// This should become the button that resets everything so you can start over.
class Reset implements ActionListener {
public void actionPerformed(ActionEvent e) {
}
}
}
Возможный дубликат http://stackoverflow.com/questions/4072594/exception-in-thread-main-java-lang-illegalargumentexception-n-must-be -positiv –