Swing Random Checkbox JApplet

Semox

Bekanntes Mitglied
Hallo Forum

Ich hänge an einem Problem bei der Umwandlung eines AWT Applets in ein JApplet... Als ich das zuerst als klassisches Applet machte, konnte ich das Programm problemlos aufrufen.

Nun schreibt mir Eclipse, daß ich einen Instaziierungsfehler begehe, was mir irgendwie einleuchtet. Jedenfalls weiß ich aber nicht an welcher Stelle...

Hier ist mein JApplet:

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JApplet;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Checkbox_test extends JApplet{

	private static final long serialVersionUID = -6367868076583433598L;
	Random r = new Random();

	public Checkbox_test(int size) {
		
		
		JFrame frame = new JFrame();
		frame.setLayout(new BorderLayout());
		frame.setTitle("Random Checkboxes activated/disengaged");
		JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		this.getContentPane().add(panel, BorderLayout.SOUTH);

		JCheckBox[] cb_arr = new JCheckBox[size];

		for (int i = 0; i < cb_arr.length; i++) {
			String str = Integer.toString(i);
			cb_arr[i] = new JCheckBox(str, true);
			int r_ = r.nextInt(255);
			int g_ = r.nextInt(255);
			int b_ = r.nextInt(255);
			Color c = new Color(r_, g_, b_);
			cb_arr[i].setBackground(c);
			panel.add(cb_arr[i]);

		}
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		new Checkbox_test(12);
	}
}

Muß man ein JPanel in ein JFrame einfügen? Dazu habe ich wenig Hilfreiches bis viel Verwirrendes gefunden. Muß man ein JPanel in ein JFrame einfügen? Dazu habe ich wenig hilfreiches gefunden. Was muß denn da verändert werden, damit das JApplet endlich arbeitet?

Gruß,
Semo
 

eRaaaa

Top Contributor
init Method

The init method is useful for one-time initialization that doesn't take very long. The init method typically contains the code that you would normally put into a constructor. The reason applets don't usually have constructors is that they aren't guaranteed to have a full environment until their init method is called. Keep the init method short so that your applet can load quickly.

Lesestoff: Lesson: Applets (The Java™ Tutorials > Deployment)

Java:
public class Checkbox_test extends JApplet {

    private static final long serialVersionUID = -6367868076583433598L;
    Random r = new Random();

    public void init() {
	JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
	this.getContentPane().add(panel, BorderLayout.SOUTH);
	JCheckBox[] cb_arr = new JCheckBox[12];
	for (int i = 0; i < cb_arr.length; i++) {
	    String str = Integer.toString(i);
	    cb_arr[i] = new JCheckBox(str, true);
	    int r_ = r.nextInt(255);
	    int g_ = r.nextInt(255);
	    int b_ = r.nextInt(255);
	    Color c = new Color(r_, g_, b_);
	    cb_arr[i].setBackground(c);
	    panel.add(cb_arr[i]);
	}
    }
}
 

javimka

Top Contributor
Jede Komponente, die in deinem Frame oder Applet sichtbar sein soll, muss mit add() hinzugefügt werden. Wieso erbt deine Klasse von JApplet, wenn sie dann doch ein JFrame erstellt?
 

Semox

Bekanntes Mitglied
Danke Euch Beiden!

... Ich habe versucht mich an die Vorgaben meiner Professorin zu halten, die mir diese Einsendeaufgabe gegeben hat.

Deswegen versucht ich das Panel und den Frame zu nutzen. Vielleicht bin ich auch auf einem ganz falschen Dampfer, wie ich das angefangen habe? Was meint Ihr?

Im Anhang ist die PDF...

Grüße,
Semo
 

eRaaaa

Top Contributor
Da steht doch garnichts davon, dass du ein (J)Applet bauen sollst? Also war dein Ansatz mit dem JFrame garnicht so schlecht, allerdings sollte dann das [c]extends JApplet[/c] weg.

Dann fehlen noch einige Kleinigkeiten und dann sieht`s doch gut aus :D:
- Es kann immer nur ein einziges CheckBox-Objekt angeschaltet sein. (Group!)
- Das CheckBox-Objekt, das am Anfang der Ausführung angeschaltet ist, wird zufällig bestimmt.
 

eRaaaa

Top Contributor
Nein, wie kommst du immer darauf dass du ein Applet bauen sollst? Du sollst doch anscheinend ein Applet zu einer normalen Anwendung umbauen

Das Applet Checkb22 soll in eine Anwendung namens CheckApp umgewandelt werden und
zusätzliche Anforderungen erfüllen.

???:L
 

Semox

Bekanntes Mitglied
... Damit bin ich quasi wieder an einem Teilproblem. Ich habe nun den Code derart verändert:

Dadurch habe ich wieder ein InstantiationException... Das verstehe ich nicht... Ich habe nun einen Konstruktor mit einem Haufen Anweisungen und eine main() Methode, die eigentlich die Menge Checkboxen übergeben soll... Warum geht das denn nicht? Irgendwas übersehe ich...

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.util.Random;

import javax.swing.JApplet;
import javax.swing.JCheckBox;
import javax.swing.JPanel;

public class Checkbox_test extends JApplet {

	private static final long serialVersionUID = -6367868076583433598L;
	Random r = new Random();

	public Checkbox_test(int size) {

		// JFrame frame = new JFrame();
		// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// frame.setLayout(new BorderLayout());
		// frame.setTitle("Random Checkboxes activated");
		JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		this.getContentPane().add(panel, BorderLayout.SOUTH);

		JCheckBox[] cb_arr = new JCheckBox[size];

		for (int i = 0; i < cb_arr.length; i++) {
			String str = Integer.toString(i);
			cb_arr[i] = new JCheckBox(str, true);
			int r_ = r.nextInt(255);
			int g_ = r.nextInt(255);
			int b_ = r.nextInt(255);
			Color c = new Color(r_, g_, b_);
			cb_arr[i].setBackground(c);
			panel.add(cb_arr[i]);

		}
		// frame.setVisible(true);
	}


	 public static void main(String[] args) { new Checkbox_test(12); }
}

EDIT: Um JApplet komme ich leider nicht herum, weil es ein Teil der Anweisung in der Aufgabe ist...

Viele Grüße
Semo
 
Zuletzt bearbeitet:

javimka

Top Contributor
Entweder du baust eine Applikation, dann hast du eine main-Methode, die den Konstruktor aufruft oder du baust ein Applet, dann wird die init() Methode aufgerufen.
 

Semox

Bekanntes Mitglied
Dann verstehe ich noch nicht, wie ich nun ohne extends JApplet diese Anweisung durchführen soll:

Jpanel hat ein Flow-Layout, während JFrame ein Border-Layout hat. Praktisch ist es,
alle erzeugten JCheckBox-Objekte in ein Objekt panel vom Typ JPanel einzufügen, und das
Objekt panel mit Hilfe der Methode getContentPane() in this einzufügen, etwa so:
this.getContentPane().add(panel, BorderLayout.SOUTH);

Mal anders gefragt, verstehst Du was meine Professorin meint?

Gruß,
Semo
 

eRaaaa

Top Contributor
Ja,

das this.getContentPane(). bezieht sich in dem Fall nicht auf das JApplet, sondern auf JFrame. Du kannst auch vom JFrame erben!
Also anstatt extends JApplet, kannst du extends JFrame schreiben.

Dann musst du halt nicht new JFrame().. und frame. .... schreiben

Java:
 // JFrame frame = new JFrame();
        // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // frame.setLayout(new BorderLayout());
        // frame.setTitle("Random Checkboxes activated");
usw. sondern kannst this benutzen!

Dein erster gepostete Code war daher garnicht so verkehrt:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.util.Random;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Checkbox_test extends JFrame{
    
    private static final long serialVersionUID = -6367868076583433598L;
    Random r = new Random();
 
    public Checkbox_test(int size) {

        this.setLayout(new BorderLayout());
        this.setTitle("Random Checkboxes activated/disengaged");
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));

        JCheckBox[] cb_arr = new JCheckBox[size];
 
        for (int i = 0; i < cb_arr.length; i++) {
            String str = Integer.toString(i);
            cb_arr[i] = new JCheckBox(str, true);
            int r_ = r.nextInt(255);
            int g_ = r.nextInt(255);
            int b_ = r.nextInt(255);
            Color c = new Color(r_, g_, b_);
            cb_arr[i].setBackground(c);
            panel.add(cb_arr[i]);
 
        }
        this.getContentPane().add(panel, BorderLayout.SOUTH);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.pack();
        this.setVisible(true);
    }
 
    public static void main(String[] args) {
        new Checkbox_test(12);
    }
}

(jetzt fehlen aber immernoch die von mir schon o.g. Anforderungen!)

/edit: Das Checkbox-Array brauchst du laut Aufgabe garnicht glaub ich :D
 
Zuletzt bearbeitet:

Semox

Bekanntes Mitglied
Hallo eRaaaa

In der Tat - das steht nicht drin. Aber ich es ist hilfreich, um die Dinger mit einem Namen (Zahl) zu versehen.

Wegen der Random Geschichte... Ich hatte kann man über eine Bedingung alle Checkboxes auf false setzen und eine auf true? Wenn ich die nämlich in eine Checkbox Group packe, dann werden es ja Radiobuttons... Das ist nicht so gewollt, glaube ich, laut Screenschott...

Viele Grüße
Semo
 

eRaaaa

Top Contributor
Also ich würde sie einfach am Anfang nicht alle auf true setzen:

Java:
 cb_arr[i] = new JCheckBox(str);

und nach der Schleife einfach:
Java:
	cb_arr[r.nextInt(size)].setSelected(true);

per Zufall eine selektieren.

Das mit der Group hab ich schon so verstanden, denn da steht ja:
Es kann immer nur ein einziges CheckBox-Objekt angeschaltet sein

daher würde ich einfach vor der Schleife:

Java:
ButtonGroup group = new ButtonGroup();

und innerhalb
Java:
group.add(cb_arr[i]);

und dann sollte alles passen :D

(ich hatte oben in meinem Code dein
Code:
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
vergessen, das würde ich wieder mit reinnehmen, genauso wie ein Aufruf von [c] this.pack();[/c] VOR
Code:
this.setVisible
(true) )
 

Semox

Bekanntes Mitglied
Hallo eRaaaa

Ein Riesendankeschön für Deine Hilfe... :applaus: :applaus:

Es klappt alles...!

Für alle anderen die es Lernen wollen, poste ich hier den vollständigen Code...

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.util.Random;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Checkbox_test extends JFrame {

	private static final long serialVersionUID = -6367868076583433598L;
	Random r = new Random();

	public Checkbox_test(int size) {

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(new BorderLayout());
		this.setTitle("Random Checkboxes activated");
		JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
		this.getContentPane().add(panel, BorderLayout.SOUTH);

		JCheckBox[] cb_arr = new JCheckBox[size];
		ButtonGroup group = new ButtonGroup();

		for (int i = 0; i < cb_arr.length; i++) {
			String str = Integer.toString(i);
			cb_arr[i] = new JCheckBox(str);
			int r_ = r.nextInt(255);
			int g_ = r.nextInt(255);
			int b_ = r.nextInt(255);
			Color c = new Color(r_, g_, b_);
			cb_arr[i].setBackground(c);
			group.add(cb_arr[i]);
			panel.add(cb_arr[i]);

		}
		cb_arr[r.nextInt(size)].setSelected(true);
		this.pack();
		this.setVisible(true);
	}

	public static void main(String[] args) {
		new Checkbox_test(12);
	}
}

Besten Dank und einen schönen Abend wünsche ich Dir,
Semo
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
Z Random Butten erstellen ohne Container AWT, Swing, JavaFX & SWT 15
J GUI/Random aktualisieren? AWT, Swing, JavaFX & SWT 3
O keine ähnliche Farben durch Random in Java AWT, Swing, JavaFX & SWT 21
xehpuk Swing NullPointerException: Random-Instanz anfangs nicht initialisiert AWT, Swing, JavaFX & SWT 4
B random anzahl an jTextFieldern einfügen AWT, Swing, JavaFX & SWT 2
B JavaFX CheckBox mit ChangeListener AWT, Swing, JavaFX & SWT 1
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J JavaFx TableView mit CheckBox AWT, Swing, JavaFX & SWT 4
karlmasutra Java FX Checkbox abfragen AWT, Swing, JavaFX & SWT 2
J SceneBuilder TableView Checkbox AWT, Swing, JavaFX & SWT 1
M JAVAFX Checkbox mit URL verlinkung AWT, Swing, JavaFX & SWT 4
A checkbox mit allen tabllen aus datenbank befüllen AWT, Swing, JavaFX & SWT 8
D JIDE TreeComboBox mit checkbox-en kombinieren AWT, Swing, JavaFX & SWT 2
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Developer_X Java JTable - Combobox + Checkbox - Cellrenderer + Editor AWT, Swing, JavaFX & SWT 3
F JTable mit Checkbox AWT, Swing, JavaFX & SWT 1
T SWT checkbox in table AWT, Swing, JavaFX & SWT 6
M JavaFX TableView mit CheckBox als Boolean AWT, Swing, JavaFX & SWT 5
Z DefaultTableModel + checkbox AWT, Swing, JavaFX & SWT 0
S Swing JTable zusätzliche Spalte mit einer Checkbox einfügen AWT, Swing, JavaFX & SWT 7
A JXTreeTable mit Checkbox AWT, Swing, JavaFX & SWT 2
P Listenelemente über Checkbox löschen AWT, Swing, JavaFX & SWT 6
D Checkbox - Datenbankausgeben AWT, Swing, JavaFX & SWT 31
A Swing JTable benutzt keine Checkbox für Booleans AWT, Swing, JavaFX & SWT 9
M Swing Dropbox / Checkbox in JTable AWT, Swing, JavaFX & SWT 3
D SWT CheckBox auslesen (Window Builder Pro) AWT, Swing, JavaFX & SWT 2
A Swing Bug in Swing? Wenn checkbox disabled reagiert ActionListener nicht AWT, Swing, JavaFX & SWT 5
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Checkbox-zustände in einem JFrame speichern AWT, Swing, JavaFX & SWT 8
C SWT CheckBox AWT, Swing, JavaFX & SWT 6
B Swing DefaultTableModel, Checkbox in Spalte AWT, Swing, JavaFX & SWT 4
C Checkbox in Liste deaktivieren und paintComponent explizit aufrufen AWT, Swing, JavaFX & SWT 12
N JTable RadioButton statt Checkbox AWT, Swing, JavaFX & SWT 4
S Checkbox AWT, Swing, JavaFX & SWT 4
Z AWT Auf bestimmte Checkbox einer Checkboxgroup zugreifen AWT, Swing, JavaFX & SWT 3
C jtable checkbox in header / spaltenüberschrift AWT, Swing, JavaFX & SWT 4
T Sprachumstellung per Checkbox, Konzeptfrage AWT, Swing, JavaFX & SWT 16
O CheckBox in Jtable - Listener darauf?? AWT, Swing, JavaFX & SWT 3
W ButtonGroup, Checkbox, A oder B oder gar nix AWT, Swing, JavaFX & SWT 3
T Checkbox in einer Tabelle AWT, Swing, JavaFX & SWT 10
G Checkbox AWT, Swing, JavaFX & SWT 7
A Checkbox-Choice Eventproblem (CMV) AWT, Swing, JavaFX & SWT 2
T Checkbox & Textfield AWT, Swing, JavaFX & SWT 5
S Checkbox oder String in JTable-Spalte AWT, Swing, JavaFX & SWT 4
L Checkbox in Tabelle AWT, Swing, JavaFX & SWT 6
G Checkbox, die eine Endlosschleife ausführt AWT, Swing, JavaFX & SWT 3
R CheckBox drücken, sodass eine Aktion ausgeführt wird AWT, Swing, JavaFX & SWT 5
F Häkchen erscheint nicht bei anklicken von Checkbox in JTable AWT, Swing, JavaFX & SWT 4
T Doppelte Abfrage eine Checkbox vermeiden AWT, Swing, JavaFX & SWT 2
F Checkbox transparent machen ? AWT, Swing, JavaFX & SWT 2
N TableModel mit CheckBox? AWT, Swing, JavaFX & SWT 5
D [JList]Checkbox einbinden ? AWT, Swing, JavaFX & SWT 3
L Checkbox in JTable (again), bei true Daten in Header AWT, Swing, JavaFX & SWT 7
F JTable mit Checkbox macht Probleme AWT, Swing, JavaFX & SWT 4
C Aktion nach Auswahl einer Checkbox AWT, Swing, JavaFX & SWT 6
W CheckBox in Jtree AWT, Swing, JavaFX & SWT 6
G Bild als Checkbox bzw gerasteten Button? AWT, Swing, JavaFX & SWT 3
J jTable + jTextarea & checkbox AWT, Swing, JavaFX & SWT 6
V CheckBox in Tabelle zeichnen AWT, Swing, JavaFX & SWT 2
D CheckBox ändert Status nur, wenn sie FocusOwner ist AWT, Swing, JavaFX & SWT 2
C commando mit checkbox AWT, Swing, JavaFX & SWT 5
T selected checkbox AWT, Swing, JavaFX & SWT 2
T Checkbox AWT, Swing, JavaFX & SWT 10
N Checkbox mit mehreren Strings belegen? AWT, Swing, JavaFX & SWT 6
J JApplet und Zeichnen AWT, Swing, JavaFX & SWT 8
J JApplet, HTML und access denied exitVM.0 AWT, Swing, JavaFX & SWT 3
B JApplet AWT, Swing, JavaFX & SWT 2
P JApplet verhält sich im Browser anders als im Eclipse (AppletViewer) AWT, Swing, JavaFX & SWT 3
P JApplet Browser Tab Öffnen AWT, Swing, JavaFX & SWT 5
H Swing JApplet - HTML - ClassNotFoundException AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
B Swing JTabbedPane in JApplet -> Reiter bei Aktualisation mehrmals zu sehen AWT, Swing, JavaFX & SWT 3
M JApplet mit Java 3D Komponente AWT, Swing, JavaFX & SWT 6
J JApplet langsam wegen vielen Tooltips? AWT, Swing, JavaFX & SWT 36
R JApplet, Elemente unsichtbar AWT, Swing, JavaFX & SWT 2
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
V Applet JApplet Flackern durch Repaint AWT, Swing, JavaFX & SWT 11
K JApplet Probleme AWT, Swing, JavaFX & SWT 5
S [JAVA] JFrame in Applet/JApplet AWT, Swing, JavaFX & SWT 14
H JApplet will sich nicht refreshen AWT, Swing, JavaFX & SWT 10
F OpenMap und Swing in JApplet AWT, Swing, JavaFX & SWT 8
S Applet JApplet Problem AWT, Swing, JavaFX & SWT 18
C Applet JApplet - Verständnissproblem AWT, Swing, JavaFX & SWT 3
H Applet JApplet soll neues Tab im Browser öffnen AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
J Swing JApplet Designfrage AWT, Swing, JavaFX & SWT 4
J JApplet schneidet Menüleiste ab AWT, Swing, JavaFX & SWT 4
D JApplet hängt im Browser fest AWT, Swing, JavaFX & SWT 5
M JFrame in JApplet einbinden AWT, Swing, JavaFX & SWT 13
Semox Swing JApplet: Problem MouseListener Anmeldung AWT, Swing, JavaFX & SWT 3
E Bild auf JApplet AWT, Swing, JavaFX & SWT 5
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
U JPanel wechsel in JApplet AWT, Swing, JavaFX & SWT 14
J AWT JApplet lädt Bild nicht hoch AWT, Swing, JavaFX & SWT 7
R JApplet - Infos ueber Browser moeglich? AWT, Swing, JavaFX & SWT 5
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben