Zeilenumbruch in JLabel

Markus09

Mitglied
Hallo Java-Junkies,

habe schon x-mal gelesen das man mittels html mehrzeilige Label verwenden kann.

aber i-wie funktionieren die Beispiele bei mir nicht.

1. Code normal:
Java:
...new JLabel ("1. 2. 3.");

2. Code mit HTML:
Java:
...new JLabel ("<html>1. <b>2.</b><b>3.</b></html>");

in der 2. Variante erschein bei mir kein Text.

Weiss jemand warum?

Danke!!!
 
C

Camino

Gast
Hmm, was ist denn zu sehen? Garnichts? Wenn ja, woher weisst du dann, ob das Label überhaupt angezeigt wird? Oder vielleicht ist das Label zu klein. Hast du dem Label eine Grösse gegeben oder ist es in einem LayoutManager drin? Oder irgendwas mit der Farbe. Zeig doch mal mehr Code, wie du das JLabel benutzt. Zeilenumbruch in HTML machst du übrigens mit <br>.
 

Markus09

Mitglied
Hi Camino,

danke für die superschnelle antwort. Das <br> war nen schreibfehler meinerseits.

Java:
text1 = new JLabel ("<html>1. <br>2.</br><br>3.</br></html>");
text1.setBounds(100, 100, 300, 300);
add(text1);

Sobald ich das <html></html> eingebe bei auch nur einem Wort z.B.:
Java:
text1 = new JLabel ("<html>1. </html>");

ist zumindest der Textvom Label oder das Label weg.

Das Fenster ist übrigens 800, 500 groß.
 
C

Camino

Gast
Hi Camino,

danke für die superschnelle antwort. Das <br> war nen schreibfehler meinerseits.

Java:
text1 = new JLabel ("<html>1. <br>2.</br><br>3.</br></html>");
text1.setBounds(100, 100, 300, 300);
add(text1);

Sobald ich das <html></html> eingebe bei auch nur einem Wort z.B.:
Java:
text1 = new JLabel ("<html>1. </html>");

ist zumindest der Textvom Label oder das Label weg.

Das Fenster ist übrigens 800, 500 groß.

Mach doch mal das JLabel grösser (bei den setBounds), oder nimm einen LayoutManager...
 

Markus09

Mitglied
Größer machen bringt nichts.
und bei 'nem Layout-manager bin ich noch unerfahren.
Ich stehe grade am Anfang meiner Programmierkentnisse mit Java.
 
C

Camino

Gast
Hmm, hast du in deinem Fenster noch andere Elemente, die das JLabel evtl. überdecken? Wo und wie fügst du das JLabel hinzu? Du musst wohl doch noch den ganzen Code (zumindest den Fensteraufbau) zeigen. Übrigens: manche Komponenten in Swing haben einen Standard-LayoutManager, so z.B. der JFrame das BorderLayout und das JPanel das FlowLayout. Wenn du dann nicht setLayout(null) explizit aufrufst, dann nützt dir dein setBounds auch nix.
 
Zuletzt bearbeitet von einem Moderator:

Markus09

Mitglied
Ha, es ist doch da,

Dank Pentalon!

ich hatte die Größeneinstellung meines fensters auf false. Dann war da nie das "umbrochene" Label zu sehen, aber die Aussage von Pentalon
Ich muss das Fenster zwar mit der Maus aufziehen, aber das mehrzeilige Label sehe ich dann.

hat dann die Lösung gebracht. Ich habs genau wie ER gemacht (natürlich vorher vergrößern/verkleinern erlaubt), und es geht.

Was mich dann aber zu der Frage führt: Warum das so ist? und: Wie kann ich das beheben?
Ach ja, Andere Elemente habe ich (noch) nicht.
 
A

AccVergessen

Gast
versuchs mal mit der escape-sequence "\n";

z.b.

Java:
JLabel lblText = new JLabel("This is a\ntext with more than\none line :)");
 

bERt0r

Top Contributor
Was mich dann aber zu der Frage führt: Warum das so ist? und: Wie kann ich das beheben?
Ach ja, Andere Elemente habe ich (noch) nicht.
Indem du einen Layoutmanager verwendest. Gewohn dir den null Layout murks gar nicht erst an, es ist viel mehr Arbeit als einen Layoutmanager zu verwenden denn das ganze setBounds etc. macht alles der Layoutmanager für dich.
 

Markus09

Mitglied
So,

nun hab ich einen Layout-Manager verwendet. Aber ich habe ein Problem: Es erscheint kein Text.
Hier mal der/die Codes:

1. Hauptprogramm:
Java:
package packageOne;

import javax.swing.JFrame;

public class Hauptprogramm {
	
	public static void main(String[] args){
		JFrame Fenster = new Fenster();
		
	}
}

2. Das Fenster (hab eine eigene Klasse erstellt damit ich öfters aus meinem Hauptprogramm darauf zugreifen kann:
Java:
package packageOne;

import java.awt.FlowLayout;
import javax.swing.JFrame;

public class Fenster extends JFrame{
		
	FlowLayout Layout1;
	
		public Fenster() {
		
		setLayout(Layout1);
		setVisible(true);
		setSize(650, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setResizable(true);
		
	}
}

3. Ein Panel mit dem Layoutmanager:
Java:
package packageOne;

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Layout1 extends JFrame{
		
	JLabel text1;	
		
	Layout1(){
		
		super("Matheprogramm");
		setLayout (new FlowLayout());
		
		text1 = new JLabel ("Hallo Welt!");
			
		add(text1);
	}
	
}

Der Code ist nach Büchern, Tut's gund eigeninitiative geschrieben, da ich noch Anfänger bin. Vielleicht kann mir ja jemand sagen Wo ich nen Fehler gemacht habe, da Eclipse keine Fehler meldet.
 

Markus09

Mitglied
Wenn ich das Objekt "new Layout1" erzeuge,
Java:
FlowLayout Inhalt = new Layout1();

dann erhalte ich folgenden Fehler: Type mismatch: cannot convert from Layout1 to FlowLayout
 

Pentalon

Bekanntes Mitglied
Hi Markus

Probiere das:

Java:
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class JLabelTest {
 
    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setLayout(new GridLayout(2,2));

        JLabel lab1 = new JLabel ("1. 2. 3.");
        JLabel lab2 = new JLabel ("<html>1. Labelzeile<br>2. Labelzeile<br>3. Labelzeile</html>");
        JLabel lab3 = new JLabel ("<html>Zeile1<br>Zeile2<br>Zeile3<br>Zeile4<br>Zeile5<html>");
        
        frame.add(lab1);
        frame.add(lab2);
        frame.add(lab3);
        
        frame.setSize(650, 500);
        frame.setVisible(true);
    }
}

Pentalon
 

Markus09

Mitglied
Danke Pentalon,

Pinzipiell funktioniert das, allerdings möchte ich das Label gerne in der Layoutklasse definieren, nicht in der Hauptklasse und da hab ich wieder das problem, das es dann iwie nicht funktioniert.
 
C

Camino

Gast
Wenn ich das Objekt "new Layout1" erzeuge,
Java:
FlowLayout Inhalt = new Layout1();

dann erhalte ich folgenden Fehler: Type mismatch: cannot convert from Layout1 to FlowLayout

Das geht so natürlich auch nicht. Die Klasse Layout1 ist ja nicht vom Typ FlowLayout. Wenn, dann so:
Java:
Layout1 inhalt = new Layout1();

Und auch das stimmt nicht:
3. Ein Panel mit dem Layoutmanager:
Java:
public class Layout1 extends JFrame{
        
    JLabel text1;   
        
    Layout1(){
        
        super("Matheprogramm");
        setLayout (new FlowLayout());
        
        text1 = new JLabel ("Hallo Welt!");
            
        add(text1);
    }
    
}
Das ist kein Panel, sondern eine Klasse abgeleitet von JFrame, also eigentlich ein Frame. Änder das doch mal in
Code:
extends JPanel
um und füge es dem JFrame mit add hinzu, und nicht mit setLayout...

Und du hast immer noch bei deinem JFrame das setVisible(true) mittendrin, anstatt erst am Ende. Du musst erst die Komponenten erstellen und dem Frame hinzufügen und dann zum Schluss das setVisible(true) aufrufen.

Du bringst da einige Sachen durcheinander...
 

Markus09

Mitglied
Habe den Code von Pentalonin mein Hauptfenster kopiert und entsprechend angepasst.

Java:
package packageOne;

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Hauptprogramm {
	
	public static void main(String[] args) {
		
		JFrame Fenster = new Fenster();
		Fenster.setLayout(new GridLayout(2,2));
		 
		JLabel lab1 = new JLabel ("<html>Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt!</html>");
		Fenster.add(lab1);
		
        Fenster.setSize(650, 500);
		Fenster.setVisible(true);
		
	}
}

... wie gesagt so funktionierts zwar, aber ich möchte das es im Layoutfenster steht.
 

Pentalon

Bekanntes Mitglied
Java:
public class Hauptprogramm {
    
    public static void main(String[] args){
        new Fenster();
    }
}

Java:
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class Fenster extends JFrame {

	public Fenster() {

		add(new JLabel("Hallo Welt!"));

		setLayout(new GridLayout(2,2));
		setSize(650, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setResizable(true);
		setVisible(true);
	}
}

Pentalon
 
C

Camino

Gast
Ich änder jetzt mal deinen geposteten Code ab.

1. Hauptprogramm:
Java:
package packageOne;

import javax.swing.JFrame;

public class Hauptprogramm {
	
	public static void main(String[] args){
		new Fenster();
		
	}
}

2. Das Fenster (= der JFrame)
Java:
package packageOne;

import javax.swing.JFrame;

public class Fenster extends JFrame{
		
	private Layout1 myPanel;
	
		public Fenster() {

		setSize(650, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setResizable(true);

		myPanel = new Layout1();

		add(myPanel);

		setVisible(true);
		
	}
}

3. Ein Panel (!!!) mit dem Layoutmanager:
Java:
package packageOne;

import java.awt.FlowLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;

public class Layout1 extends JPanel{
		
	JLabel text1;	
		
	Layout1(){
		
		setLayout (new FlowLayout());
		
		text1 = new JLabel ("Hallo Welt!");
			
		add(text1);
	}
	
}


Ich hoffe, dass ich jetzt nichts übersehen habe...

EDIT: Das JPanel hat als Standard das FlowLayout, braucht man also eigentlich nicht mehr explizit zuweisen und kann dort weg.
 
Zuletzt bearbeitet von einem Moderator:

Markus09

Mitglied
Hallo Camino, Ich hab mal deinen Code genommen und angepasst.

Meine Frage ist nun, wenn ich ein neues Fenster erzeugen will (ohne das Panel), kann ich dann wieder auf meine Fenster-Klasse zu greifen, oder muß ich mir nen ein neus "Fenster" erstellen?
 
C

Camino

Gast
Nein, normalerweise erstellst du dir nur einmal zu Beginn ein Fenster (JFrame) und das ganze Programm läuft dann dort drin ab. Wenn du innerhalb dem Frame dann etwas anderes anzeigen möchtest, kannst du dort den Inhalt austauschen oder ändern.
 
Zuletzt bearbeitet von einem Moderator:

Andy17

Aktives Mitglied
Servus,

ich hab zwar die letzten Kommentare alle nicht gelesen (War mir dann doch zuviel Arbeit :oops: :D), außer dem Vorletzten, würde dir aber empfehlen der einfach heit halber für alle deine Klassen, die du mehrmals verwenden willst eine sog. Main/Oberklasse zu entwerfen und dir die einzelnen Komponenten aus einer XML zu laden. Sozusagen deine Config.
Falls benötigt, kann ich gerne beispielcode posten, ansonsten sollten dir die auf dieser Seite gelisteten Links weiterhelfen:

Java XML Tutorial

LG Andy
 

Markus09

Mitglied
@Camino: hm, hast ja eigentlich recht,

würde aber mit meinen Vorstellungen nicht übereinstimmen.

Gut; ich erklär das kurz:
Im "Start"-(oder auch Haupt-)fenster befindet sich
1. der Text (das Panel),
2. ein Eingabefeld,
3. ein Weiter-Button.

Beim Klicken auf den Button soll ein "neues" Fenster oder cas bestehende neu sortiert werden (kein Panel mehr, kein Eingabefeld, nur noch 4 Buttons) erscheinen.

@Andy17:Ja soetwas wäre nicht schlecht, da ich aber grade am Anfang bei Java bin, ist vieles immer noch neuland für mich, bei deinem link werde ich mich bei zeiten durchlesen. Danke Dir.

Gruß Markus
 
C

Camino

Gast
Beim Klicken auf den Button soll ein "neues" Fenster oder cas bestehende neu sortiert werden (kein Panel mehr, kein Eingabefeld, nur noch 4 Buttons) erscheinen.

Dafür gibt es z.B. die Möglichkeit des CardLayouts, d.h. du erstellst mehrere Panels, fügst sie dem CardLayout hinzu und steuerst dann, welches dieser Panel angezeigt wird. Kann man sich in etwa wie ein Kartenstapel vorstellen, bei dem das oberste Panel zu sehen ist. In deinem Fall wäre das erste Panel mit dem Eingabefeld und das zweite Panel mit den 4 Buttons. Es gibt halt mehrere Möglichkeiten, den Programmablauf zu steuern und das anzuzeigen, was du möchtest. Hängt halt immer davon ab, was du tun willst.

Und bevor du mit dem erstellen deiner Komponenten über XML anfängst, solltest du auf jeden Fall erst mal mit den Swing-Grundlagen (Komponenten, LayoutManager) einigermassen vertraut sein.
 
Zuletzt bearbeitet von einem Moderator:

Markus09

Mitglied
Mir scheint, das Java mir da sehr viel Spielraum gewährt. Ich habe ähnliches mal mit VB angefangen und bin schnell an Grenzen gestoßen, was meine Vorstellung angeht. Schließlich habe ich dann aufgegeben. Ich habe so den Verdacht, das dieses mit Jave nicht (oder zumindest nicht so schnell) passieren wird. Naja ich werd erstmal schlafen gehen, unb dann morgen weitermachen. Gute N8!!
 
C

Camino

Gast
An deine Grenzen wirst du so schnell nicht stossen. Du musst dir einfach nur überlegen, was du haben möchtest, und dann lässt sich das mit Java meist irgendwie hinkriegen. Entweder es gibt dafür schon fertige Komponenten oder Lösungen, oder man muss sich das eben so "hinbiegen" wie man es haben will.
 

Andy17

Aktives Mitglied
1. GN8

2. Warum machst du es nicht einfach so:
Java:
Frame.add(Button1);
und nach dem Buttondruck
Java:
Frame.remove(Button1);
Frame.add(Button1ERSATZ);
oder, wie oben schon angemerkt mit dem Cardlayout?

Hoffe ich hole hier nicht alte Lösungen wieder hoch, wie gesagt, war zu faul mir alles weiter als den letzen Post und einige der ersten durchzulesen.
 

Markus09

Mitglied
So, ich habe es doch etwas anders gemacht. da ich das Panel/Label so wie es grad ist ja nur 1x verwenden möchte, habe ich es auch ins Hauptfenster gepackt. Nun kann ich immer an jeder beliebegen Stelle im Programm ein neues LEERES Fenster erzeugen.

Hauptprogramm:

Java:
package packageOne;

import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Hauptprogramm {
	
	public static void main(String[] args) {
		
		JFrame Fenster = new Fenster();
		
		Fenster.setLayout(new GridLayout(2,2));
			
			JLabel text1 = new JLabel ("<html>Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt!</html>");
		            
			Fenster.add(text1);
		
			Fenster.setSize(650, 500);
			Fenster.setVisible(true);
	}
}

Fenster:

Java:
package packageOne;

import javax.swing.JFrame;

public class Fenster extends JFrame {
		
		public Fenster() {
		
		setSize(650, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setResizable(true);
		setTitle("Matheprogramm");
	}
}

Allerdings habe ich nun ein Problem; ich kann das label jetzt nun nicht mehr in Größe oder Position ändern, was ich gerne möchte um es meine Vorstellungen im Fenster anzupassen.
 
Zuletzt bearbeitet:

Andy17

Aktives Mitglied
Hey, ich würde dir generell mal einen etwas anderen Programmierstil empfehlen:

Zuerst dein Package-Name (Wie immer)
Dann deine Importe
Dann deine Deklarationen, welche du static halten möchtest
Dann deine Methoden (public static oder protected, je nachdem, was du damit machen möchtest, wo die Methode sichtbar sein soll)
-> In die Methoden die nicht statischen Deklarationen (nur Methodenabhängig)
Dann deine MainMethode
Und dann das Klassenende.

Hier dein "Hauptprogrammcode" umgestellt:
Java:
package packageOne;
 
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class Hauptprogramm {

public static JFrame Fenster = new JFrame();
public static JLabel text1 = new JLabel();

public static void Fenster() {
Fenster.setLayout(new GridLayout(2,2));
text1 = new JLabel ("<html>Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt! Hallo Welt!</html>");

Fenster.add(text1);        

Fenster.setSize(650, 500);
Fenster.setVisible(true);
Fenster.setDefaultCloseOperation(Fenster.EXIT_ON_CLOSE);
Fenster.setLocationRelativeTo(null);
Fenster.setResizable(true);
Fenster.setTitle("Matheprogramm");
}
}

public static void main(String[] args) {
Fenster();
}
}
Das wäre dein Programm in Kurzfassung, ohne umständliches Drumherum, in der "richtigen" Reihenfolge.
Wobei man dazu sagen muss, dass es keine "richtige" sondern eher eine übersichtliche Reihenfolge gibt.

Dein Punkt mit dem leeren Fenster erzeugen ( :shock: WTF? ???:L ) ist sinnlos. Ein leeres Fenster kannst du überall erzeugen, du kannst z.B. eines deklarieren und wenn du ein leeres fenster (warum auch immer) willst, immer wieder dasselbe aufrufen. Allerdings ist das total Sinnfrei, wie schon gesagt. Ich würde dir eher empfehlen alles, was der User machen / erleben soll in ZWEI verschiedene Klassen (evtl. auch versch. Packages) zu packen, dort zu deklarieren und initialisieren, sodass alles passt und dann nur TEILE der anderen Klassen / Packages importieren, dann ist dein Programm sozusagen "sicherer". Weiter wäre dann noch eine Klasse / ein Package für deine Konfiguration sinnvoll, jedoch nur, wenn du ein größeres Programm machst. Bei deiner "kleinen" Klasse lohnt sich das nicht wirklich. Empfehlen würde ich dir das im Sinne des Übens trotzdem.

AUßERDEM: WICHTIG: Bevor du dich an den Rechner setzt und loscodest, wäre es ganz gut, dir einmal enige Beispiele anzuschauen und dich nicht sofort in ein Problem zu verrennen. Gerade aufgrund der vielen Möglichkeiten, die Java einem bietet, sollte man sich zuerst LANGSAM rantasten. Sonst führt das zu solchen vermeintlich unnötigen Problemen, wie dem über meinem Post, dass andere User, die dir nur helfen wollen, aufgeben und sich eventuell fragen, warum du nicht vorher einfach mal z.B. Onkel Google fragst o.ä.

Ich hoffe ich bin dir damit nicht zu Nahe getreten, sind nur Tipps, die mir damals leider nicht gegeben wurden, weshalb ich mich anfangs auch etwas doof angestellt habe.
Für ein gutes UI, befolge einfach die o.g. Tipps und da dieses Forum nicht dazu da ist, euch die Arbeit abzunehmen, sondern nur an eurer Seite / zu eurer Hilfe dazusein, bitte Google vorher / frag Freunde oder schau dir via Hotkeys (F3 , F2 u.ä.) die versch. Möglichkeiten an und erst, nachdem du selber überhaupt nichtmehr weiter weißt, Poste etwas.

MfG,
Andy 17
 
C

Camino

Gast
Wobei man dazu sagen muss, dass es keine "richtige" sondern eher eine übersichtliche Reihenfolge gibt.

Ich würde aber trotzdem das setVisible(true) für den Frame am Ende aufrufen, wenn alle Komponenten erstellt sind. Und warum du jetzt das static für die Methode und die Objekte eingebracht hast, weiss ich auch nicht. Auch die Namensgebung ist nicht so toll bzw.verwirrend, z.B. wenn die Methode Fenster heisst, und der Frame auch genauso.
 

Andy17

Aktives Mitglied
Jep, damit hast du zweifellos mit allem recht, was du schreibst, Ich wollte nur einfach möglichst nah an seinen Vorgaben bleiben.
 

Markus09

Mitglied
So, ich "Mische" dann auch wieder mit. Habe Mein Programm mal anders gestalltet (nicht unbedingt nach Andy's Style), aber es läuft (fast).

ähm, achso, @Andy: ich google mir schon die Finger wund, und die beste Lösung finde ich besteht aus 1. Videos ( YouTube), 2. Bücher (Gallileo openbooks) und 'last but not least' (3.) Euch im Forum. das ist so in etwa meine Vorgehensweise beim Programmieren, wobei ich viele(!) allgemeine Beispiele bekomme. Doch irgendwann stehe ich halt mal an einer Stelle an der ich selber (auch mit Video und Google) nicht mehr weiterkomme, dann bin ich Dankbar das ich auf erfahrene User Wie Euch zurückkommen kann; und genau jetzt ist es wieder soweit.

Hier mal der Code:
Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
	 
public class Fenster1 extends JFrame {
	
	public Fenster1() {	
	    
		JLabel begrüßung;
		JLabel nameAusgabe;
		JButton weiter;
		JButton abbrechen;
		JTextField nameEingabe;
						
	    setSize(600, 400);
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    setTitle("Rechenprogramm");
	    setLocationRelativeTo(null);
	    setLayout(null);
	    setResizable(false);
	    
	    
	    begrüßung = new JLabel("<html>Hallo,<p><p>Dies ist ein kleines Programm, welches dir hilft " +
	    		"rechnen zu lernen, oder wenn du schon rechnen kannst, es zu verbessern.<p>" +
	    		"wenn du möchtest, schreibe in den Kasten unten am Fensterrand deinen " +
	    		"Namen und klicke mit der linken Maustaste auf den 'Weiter'-knopf. Du" +
	    		"kannst aber auch auf den 'Abbrechen'-knopf klicken, wenn du das Programm beenden möchtest.");
	    Font Schrift = new Font("Serif", Font.BOLD, 20);
	    begrüßung.setBounds(20,-89,580,400);
	    begrüßung.setFont(Schrift);
	    add(begrüßung);
	    
	    nameAusgabe = new JLabel("ich");
	    nameAusgabe.setBounds(20,90,300,400);
	    nameAusgabe.setFont(Schrift);
	    add(nameAusgabe);
	    
	    nameEingabe = new JTextField();
	    nameEingabe.setBounds(20,312,300,30);
	    nameEingabe.setFont(Schrift);
	    add(nameEingabe);
	    
	    weiter = new JButton("Weiter");
	    weiter.setBounds(350,300,100,50);
	    weiter.addActionListener(new WeiterListener());
	    add(weiter);
	    
	    abbrechen = new JButton ("Abbrechen");
	    abbrechen.setBounds(460,300,100,50);
	    add(abbrechen);
	    
	    setVisible(true);
    }
	
	private class WeiterListener implements ActionListener{
		
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			nameAusgabe.setText("Hallo Du!");			
		}
	}
}

inZeile 66 steckt ein Fehler: nameAusgabe cannot be resolved.

mein programm basiert Hauptsächlich auf Video Tuts, und da taucht kein fehler auf Onkel Google hat leider nicht die erwarteten Lösungen gebracht. Vielleicht könnt ihr mir helfen?
 

Thorakas

Mitglied
Deine Variable
Code:
nameAusgabe
hast du im Konstruktor deklariert. Sie ist außerhalb des Konstruktors nicht nutzbar.
 

Markus09

Mitglied
ok, hab die Objekte außerhalb der Methde Deklariert

Java:
public class Fenster1 extends JFrame {
	
	JLabel begrüßung;
	JLabel nameAusgabe;
	JButton weiter;
	JButton abbrechen;
	JTextField nameEingabe;
	
	public Fenster1() {
...

und esklappt!!!

Dank Euch!!!

Auf zur nächsten Hürde......
 

Markus09

Mitglied
Hallo,

zur Hürde: Mein "Fenster1" schliest nicht, stattdessen kommt 'ne Liste mit zig Fehlern!

hier mal der
Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
	 
public class Fenster1 extends JFrame {
	
	JLabel begrüßung;
	JLabel nameAusgabe;
	JButton weiter;
	JButton abbrechen;
	JTextField nameEingabe;
	JFrame Fenster2;
	JFrame Fenster1;
	
	public Fenster1() {	
	    						
	    setSize(600, 400);
	    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
	    setTitle("Rechenprogramm");
	    setLocationRelativeTo(null);
	    setLayout(null);
	    setResizable(false);
	    
	    
	    begrüßung = new JLabel("<html>Hallo,<p><p>Dies ist ein kleines Programm, welches dir hilft " +
	    		"rechnen zu lernen, oder wenn du schon rechnen kannst, es zu verbessern.<p>" +
	    		"wenn du möchtest, schreibe in den Kasten unten am Fensterrand deinen " +
	    		"Namen und klicke mit der linken Maustaste auf den 'Weiter'-knopf. Du" +
	    		"kannst aber auch auf den 'Abbrechen'-knopf klicken, wenn du das Programm beenden möchtest.");
	    Font Schrift = new Font("Serif", Font.BOLD, 20);
	    begrüßung.setBounds(20,-89,580,400);
	    begrüßung.setFont(Schrift);
	    add(begrüßung);
	    
	    nameAusgabe = new JLabel("ich");
	    nameAusgabe.setBounds(20,90,300,400);
	    nameAusgabe.setFont(Schrift);
	    add(nameAusgabe);
	    
	    nameEingabe = new JTextField();
	    nameEingabe.setBounds(20,312,300,30);
	    nameEingabe.setFont(Schrift);
	    add(nameEingabe);
	    
	    weiter = new JButton("Weiter");
	    weiter.setBounds(350,300,100,50);
	    weiter.addActionListener(new WeiterListener());
	    add(weiter);
	    
	    abbrechen = new JButton ("Abbrechen");
	    abbrechen.setBounds(460,300,100,50);
	    add(abbrechen);
	    
	    setVisible(true);
    }
	
	private class WeiterListener implements ActionListener{
		
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			nameAusgabe.setText(nameEingabe.getText());
			nameEingabe.setText("");
			
			Fenster2 = new Fenster2();
			Fenster2.setVisible(true);
			Fenster1.dispose();
		}
	}
}

und hier mal die Fehlerliste:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Fenster1$WeiterListener.actionPerformed(Fenster1.java:74)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Wenn jemand ne Lösung oder nen Tip hätte wär ich dankbar
 

Andy17

Aktives Mitglied
Daran bist du selber Schuld.
Was macht wohl:
Java:
setDefaultCloseOperation(Frame.DO_NOTHING_ON_CLOSE);
???:L
Richtig: Es sagt, du kannst dein Fenster nicht über das ROTE X schließen.
Mit terminate und TaskMgr geht es garantiert dennoch.
Tipp:
Ersetze das o.g. hierduch:
Java:
setDefaultCloseOperation(Frame.EXIT_ON_CLOSE);
Nun solltest du keine Probleme mehr bekommen. :toll:
MFG Andy
 

Markus09

Mitglied
öhm, da hast du falsch verstanden, ich meinte das Schließen aus dem Programm heraus: der Klick auf den Button soll bewirken das

1. das Label unten die Zeichen aus dem Textfeld annimmt (klappt),
2. das 1. fenster geschlossen wird (Klappt nicht),
3. ein 2. Fenster aufgeht, (klappte bisher, nun aber auch nicht obwohl ich nichts am Code verändert hab).
 

Thorakas

Mitglied
Wenn mich nicht alles täuscht, hast du von Fenster1 kein Objekt erzeugt. Die Referenz ist noch
Code:
null
, deswegen wird eine NullPointerException geschmissen.
 

jgh

Top Contributor
damit erzeugst du kein neues Objekt, sondern deklarierst nur eines!

hier mal dein Code ein wenig korrigiert:
Insbesondere die Zeilen
[java=55] weiter.addActionListener(new WeiterListener(this));[/code]
und die geänderete
Code:
WeiterListener
-Klasse solltest du Beachtung schenken.

Fenster2 und die Main-Methode sind halt nur einfach schnell hingeschrieben, damit der Code kompilieren kann...musst du natürlich mit deinem Code austauschen.

[java=65] private class WeiterListener implements ActionListener {
Fenster1 fenster1;

public WeiterListener(Fenster1 fenster1) {
this.fenster1 = fenster1;
}...[/code]

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Fenster1 extends JFrame {
	public static void main(String[] args) {
		new Fenster1();
	}

	JLabel begrüßung;
	JLabel nameAusgabe;
	JButton weiter;
	JButton abbrechen;
	JTextField nameEingabe;
	JFrame Fenster2;
	//JFrame Fenster1; Das wird nicht benutzt!!!

	public Fenster1() {

		setSize(600, 400);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setTitle("Rechenprogramm");
		setLocationRelativeTo(null);
		setLayout(null);
		setResizable(false);

		begrüßung = new JLabel(
				"<html>Hallo,<p><p>Dies ist ein kleines Programm, welches dir hilft "
						+ "rechnen zu lernen, oder wenn du schon rechnen kannst, es zu verbessern.<p>"
						+ "wenn du möchtest, schreibe in den Kasten unten am Fensterrand deinen "
						+ "Namen und klicke mit der linken Maustaste auf den 'Weiter'-knopf. Du"
						+ "kannst aber auch auf den 'Abbrechen'-knopf klicken, wenn du das Programm beenden möchtest.");
		Font Schrift = new Font("Serif", Font.BOLD, 20);
		begrüßung.setBounds(20, -89, 580, 400);
		begrüßung.setFont(Schrift);
		add(begrüßung);

		nameAusgabe = new JLabel("ich");
		nameAusgabe.setBounds(20, 90, 300, 400);
		nameAusgabe.setFont(Schrift);
		add(nameAusgabe);

		nameEingabe = new JTextField();
		nameEingabe.setBounds(20, 312, 300, 30);
		nameEingabe.setFont(Schrift);
		add(nameEingabe);

		weiter = new JButton("Weiter");
		weiter.setBounds(350, 300, 100, 50);
		weiter.addActionListener(new WeiterListener(this));
		add(weiter);

		abbrechen = new JButton("Abbrechen");
		abbrechen.setBounds(460, 300, 100, 50);
		add(abbrechen);

		setVisible(true);
	}

	private class WeiterListener implements ActionListener {
		Fenster1 fenster1;

		public WeiterListener(Fenster1 fenster1) {
			this.fenster1 = fenster1;
		}

		@Override
		public void actionPerformed(ActionEvent e) {

			nameAusgabe.setText(nameEingabe.getText());
			nameEingabe.setText("");

			Fenster2 = new Fenster2();
			Fenster2.setVisible(true);
			fenster1.dispose();
		}
	}

	private class Fenster2 extends JFrame {

	}
}
 

Markus09

Mitglied
OK, ich hab es wieder etwas umstrukturiert,

Der Listener steht jetzt in der Mainklasse:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MainProgramm {
	
	public class WeiterListener implements ActionListener {
        
		JLabel nameAusgabe;
		JButton weiter;
		JButton abbrechen;
		JTextField nameEingabe;
		JFrame Fenster2 = new Fenster2();
		JFrame Fenster1 = new Fenster1();
		
		public WeiterListener(Fenster1 Fenster1) {
			
			this.Fenster1 = Fenster1;
         }
 
        @Override
        public void actionPerformed(ActionEvent e) {
 
            nameAusgabe.setText(nameEingabe.getText());
            nameEingabe.setText("");
 
            Fenster2.setVisible(true);
            Fenster1.dispose();
        }
	}
		public static void main(String[] args){
			
		}	
}

...alle Objekte im 1. Fenster in Fenster1:
Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
	 
public class Fenster1 extends JFrame {
	
	JLabel begrüßung;
	JLabel nameAusgabe;
	JButton weiter;
	JButton abbrechen;
	JTextField nameEingabe;
	JFrame Fenster2;
	JFrame Fenster1;
	
	public Fenster1() {	
	    						
	    setSize(600, 400);
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    setTitle("Rechenprogramm");
	    setLocationRelativeTo(null);
	    setLayout(null);
	    setResizable(false);
	    	    
	    begrüßung = new JLabel("<html>Hallo,<p><p>Dies ist ein kleines Programm, welches dir hilft " +
	    		"rechnen zu lernen, oder wenn du schon rechnen kannst, es zu verbessern.<p>" +
	    		"Wenn du möchtest, schreibe in den Kasten unten im Fenster deinen " +
	    		"Namen und klicke mit der linken Maustaste auf den 'Weiter'-Knopf. Du" +
	    		"kannst aber auch auf den 'Abbrechen'-Knopf klicken, wenn du das Programm beenden möchtest.");
	    Font Schrift = new Font("Serif", Font.BOLD, 20);
	    begrüßung.setBounds(20,-89,580,400);
	    begrüßung.setFont(Schrift);
	    add(begrüßung);
	    
	    nameAusgabe = new JLabel("ich");
	    nameAusgabe.setBounds(20,90,300,400);
	    nameAusgabe.setFont(Schrift);
	    add(nameAusgabe);
	    
	    nameEingabe = new JTextField();
	    nameEingabe.setBounds(20,312,300,30);
	    nameEingabe.setFont(Schrift);
	    add(nameEingabe);
	    
	    weiter = new JButton("Weiter");
	    weiter.setBounds(350,300,100,50);
	    weiter.addActionListener (new WeiterListener(this));
	    add(weiter);
	    
	    abbrechen = new JButton ("Abbrechen");
	    abbrechen.setBounds(460,300,100,50);
	    add(abbrechen);
	    
	    setVisible(true);
    }
   	
}

alle Objekte (noch nicht fertig) im 2. Fenster in Fenster2:
Java:
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Fenster2 extends JFrame {
	
	public Fenster2() {	
		
		setSize(600, 400);
	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    setTitle("Rechenprogramm");
	    setLocationRelativeTo(null);
	    setLayout(null);
	    setResizable(false);    
	    setVisible(true);
    }    
}
Allerdings hab ich wohl in Fenster1 Zeile 51 folgenden Fehler: WeiterListener cannot be resolved to a type. Google meint, das wohl ein Import fehlt. Welcher denn? Wisst ihr weiter?
Dann hab ich das Problem, das zwar ein 2. Fenster sich öffnet aber nich das Fenster2 das srtört mich wie bekomme ich das nu hin?

Danke für Eure Hilfen.


Dann noch ewas komplett anderes. Soll ich jetzt immer weiter hier im Thread machen, oder soll ich einen neuen mit treffenderer Beschreibung aufmachen? Was meint ihr? Danke für die Antworten!
 

jgh

Top Contributor
was soll man dazu noch sagen?

na evtl. morgen mehr...hier mal ein lauffähiger Code deiner Application, einige bemerkungen stehen im Code:

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Fenster1 extends JFrame {

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

	JLabel begrüßung;
	JLabel nameAusgabe;
	JButton weiter;
	JButton abbrechen;
	JTextField nameEingabe;
	JFrame Fenster2;

	// JFrame Fenster1; Das wird nicht benutzt!!!

	public Fenster1() {

		setSize(600, 400);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		setTitle("Rechenprogramm");
		setLocationRelativeTo(null);
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);

		begrüßung = new JLabel(
				"<html>Hallo,<p><p>Dies ist ein kleines Programm, welches dir hilft "
						+ "rechnen zu lernen, oder wenn du schon rechnen kannst, es zu verbessern.<p>"
						+ "wenn du möchtest, schreibe in den Kasten unten am Fensterrand deinen "
						+ "Namen und klicke mit der linken Maustaste auf den 'Weiter'-knopf. Du"
						+ "kannst aber auch auf den 'Abbrechen'-knopf klicken, wenn du das Programm beenden möchtest.");
		Font Schrift = new Font("Serif", Font.BOLD, 20);
		begrüßung.setBounds(20, -89, 580, 400);
		begrüßung.setFont(Schrift);
		add(begrüßung);

		nameAusgabe = new JLabel("ich");
		nameAusgabe.setBounds(20, 90, 300, 400);
		nameAusgabe.setFont(Schrift);
		add(nameAusgabe);

		nameEingabe = new JTextField();
		nameEingabe.setBounds(20, 312, 300, 30);
		nameEingabe.setFont(Schrift);
		add(nameEingabe);

		weiter = new JButton("Weiter");
		weiter.setBounds(350, 300, 100, 50);
		weiter.addActionListener(new WeiterListener(this));
		add(weiter);

		abbrechen = new JButton("Abbrechen");
		abbrechen.setBounds(460, 300, 100, 50);
		add(abbrechen);

		setVisible(true);
	}

}

class Fenster2 extends JFrame {

	public Fenster2() {

		setSize(600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("Rechenprogramm");
		setLocationRelativeTo(null);
		setLayout(null);
		setResizable(false);
		setVisible(true);
	}
}

class WeiterListener implements ActionListener {

	// JLabel nameAusgabe; wie sollen dieses Variablen einen Wert bekommen????
	// JButton weiter;
	// JButton abbrechen;
	// JTextField nameEingabe;
	Fenster2 fenster2; // wenn dann ist das vom Typ Fenster 2
	Fenster1 fenster1;

	public WeiterListener(Fenster1 Fenster1) {

		this.fenster1 = Fenster1;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println(123);
		fenster1.nameAusgabe.setText(fenster1.nameEingabe.getText());
		fenster1.nameEingabe.setText("");
		fenster2 = new Fenster2();
		fenster2.setVisible(true);
		fenster1.dispose();
	}
}
 

Markus09

Mitglied
Hallo jgh,
Danke erstmal,
als warscheinlich erfahrener Java-programmierer wirst du wohl nur kopfschüttelnd über meinem Code gesessen haben.:D
Naja bin ja auch noch nen Java-"Kleinkind". Aber ich werde "älter".Habe mir mal das Videomaterial der Uni Aachen angeeignet, und es ist zihemlich gut. Aber jetzt zu deinem Code-Beispiel.
So wie ich das sehe habe ich für alles nur noch 1 Fenster in welchem der Code kommt.
Ich habe soetwas mla in VB angefangen, und dieser Code wäre in VB das reinste Chaos, dort wir alle möglich in eigene Klassen verpackt und fast jedes "Teil" auf der GUI bekommt sein eignenes Codefenster, ist das hier nicht? Dann muß ich mich wieder umgewöhnen. Denn ich war ja im begriff für (wenigstens) meine Fenster eigene Klassencodefenster zu erstellen damit der GesamtCode nicht so Lang und unübersichtlich wird.

ach ja 2 Dinge noch

1. Das System.out.println(123); in Zeile 100 ist doch völlig überflüssig. :pfeif:
2. Wenn ich das so ausführe habe ich ein leeres 2. Fenster, also JLabel name Ausgabe ins 2 Frame gepackt, Alles angepasst, keine Fehler, Programmstart, Name eingegeben,Button geklickt und nicht geht mehr ;(

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at WeiterListener.actionPerformed(Hauptfenster.java:100)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Java:
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
 
public class Hauptfenster extends JFrame {  
 
    public static void main(String[] args) { //Programm begin mit dem 1.Fenster (Hauptfenster).
        new Hauptfenster();
    }
 
    JLabel begrüßung;
    JButton weiter;
    JButton abbrechen;
    JTextField nameEingabe;
    JFrame Fenster2;
  
    public Hauptfenster() {
 
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setTitle("Rechenprogramm");
        setLocationRelativeTo(null);
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        
        begrüßung = new JLabel( //Begrüßungslabel, Hier liest der user um was es geht.
                "<html>Hallo,<p><p>Dies ist ein kleines Programm, welches dir hilft "
                        + "rechnen zu lernen, oder wenn du schon rechnen kannst, es zu verbessern.<p>"
                        + "wenn du möchtest, schreibe in den Kasten unten am Fensterrand deinen "
                        + "Namen und klicke mit der linken Maustaste auf den 'Weiter'-knopf. Du"
                        + "kannst aber auch auf den 'Abbrechen'-knopf klicken, wenn du das Programm beenden möchtest.");
        Font Schrift = new Font("Serif", Font.BOLD, 20);
        begrüßung.setBounds(20, -89, 580, 400);
        begrüßung.setFont(Schrift);
        add(begrüßung);
 
        nameEingabe = new JTextField(); //Hier soll der User seinennamen eingeben der auf allen folgenden Frames immer steht (Bsp: Hallo:xxx)
        nameEingabe.setBounds(20, 312, 300, 30);
        nameEingabe.setFont(Schrift);
        add(nameEingabe);
 
        weiter = new JButton("Weiter"); //Der knopf um weiter zu kommen
        weiter.setBounds(350, 300, 100, 50);
        weiter.addActionListener(new WeiterListener(this));
        add(weiter);
 
        abbrechen = new JButton("Abbrechen"); //DerKnopf zum Abbrechen des Programms
        abbrechen.setBounds(460, 300, 100, 50);
        add(abbrechen);
 
        setVisible(true);
    }
 
}
 
class Fenster2 extends JFrame {
	
	JLabel nameAusgabe;
 
    public Fenster2() { //Neues Fenster
    	
    	setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Rechenprogramm");
        setLocationRelativeTo(null);
        setLayout(null);
        setResizable(false);
        
        nameAusgabe = new JLabel("Hallo"); //hier (sollte stehen) steht der Name der im ersten Fenster eingegeben wurde
        Font Schrift = new Font("Serif", Font.BOLD, 20);
        nameAusgabe.setBounds(20, 90, 300, 400);
        nameAusgabe.setFont(Schrift);
        add(nameAusgabe);
        
        setVisible(true);
    }
}
 
class WeiterListener implements ActionListener {
 
    
    Fenster2 fenster2;
    Hauptfenster fenster1;
 
    public WeiterListener(Hauptfenster Fenster1) {
 
        this.fenster1 = Fenster1;
    }
 
    @Override
    public void actionPerformed(ActionEvent e) {
                
        fenster1.nameEingabe.setText("");
        fenster2.nameAusgabe.setText(fenster1.nameEingabe.getText());
        
        new Fenster2();
        
        fenster1.dispose();
    }
}
 
Zuletzt bearbeitet:

jgh

Top Contributor
^^ aber evtl. kannst du mich mal aufklären, was du hier machen willst:

Java:
public class MainProgramm {
    
    public class WeiterListener implements ActionListener {

wozu dieses Konstrukt...wenn ich ehrlich bin, war ich sogar überrascht, dass sowas kompiliert...


grundsätzlich sollte das hier auch so sein...wenn du allerdings Fragen hast, oder Hilfe brauchst, lässt sich das weitaus einfacher erledigen, wenn alles in einer Datei steht. Für dein Projekt solltest du die Klassen einzeln in Dateien und Packages speichern. Hier im Forum ist ein KSKB das einfachste...

Wenn du eine Klasse WeiterListener hast, dann kannst du da zwar Labels, Textfields usw. deklarieren...solange du sie initialisierst wirst du beim Zugriff auf diese Elemente immer eine NPE bekommen.

Was du eigentlich willst, sind die Komponenten deines Frames...und die holst du dir, indem du bspw. eine Instanz deines Fensters an die WeiterListener-Klasse übergibst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JUNSKI Zeilenumbruch JLabel Java Basics - Anfänger-Themen 1
A Zeilenumbruch im Jlabel Java Basics - Anfänger-Themen 11
chik Zeilenumbruch in einem JLabel Java Basics - Anfänger-Themen 6
M JLabel - Zeilenumbruch Java Basics - Anfänger-Themen 2
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
Dawinartor Klassen Zeilenumbruch in JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 8
S \n nicht in Zeilenumbruch umwandeln Java Basics - Anfänger-Themen 5
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
C Stringbuffer auf Zeilenumbruch überprüfen Java Basics - Anfänger-Themen 14
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
I Zeilenumbruch im mailto-body Java Basics - Anfänger-Themen 5
D Zeilenumbruch- .txt-Ausgabedatei Java Basics - Anfänger-Themen 10
AssELAss Xml nur nach End-Tag Zeilenumbruch?? Java Basics - Anfänger-Themen 7
A Zeilenumbruch im Code Java Basics - Anfänger-Themen 5
E Zeilenumbruch!? Java Basics - Anfänger-Themen 3
M ArrayList || Bei Ausgabe nach jedem 10. Eintrag Zeilenumbruch Java Basics - Anfänger-Themen 7
M Zeilenumbruch in JTextarea Java Basics - Anfänger-Themen 4
J Input/Output Datei - Zeilenumbruch einlesen Java Basics - Anfänger-Themen 10
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
N Denkanstoß Zeilenumbruch Java Basics - Anfänger-Themen 9
M Zeilenumbruch JTextPane Java Basics - Anfänger-Themen 2
C jTable in .txt - versteckter Zeilenumbruch? Java Basics - Anfänger-Themen 6
T Datentypen Zeilenumbruch im String (2-dimensionales array) Java Basics - Anfänger-Themen 4
D Zeilenumbruch für XMl File Java Basics - Anfänger-Themen 3
C Zeilenumbruch verhindern / Clrscr ? Java Basics - Anfänger-Themen 3
T System.out.printf Zeilenumbruch nach x Stellen Java Basics - Anfänger-Themen 4
A Abfrage Zeilenumbruch+.+Zeilenumbruch Java Basics - Anfänger-Themen 17
c_sidi90 jTextarea kein Zeilenumbruch erlauben Java Basics - Anfänger-Themen 4
O TxT Zeilenumbruch Java Basics - Anfänger-Themen 4
E Zeilenumbruch von String schneiden Java Basics - Anfänger-Themen 13
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
M Zeilenumbruch nach x Zeichen Java Basics - Anfänger-Themen 8
C textfield zeilenumbruch Java Basics - Anfänger-Themen 2
M "spezieller" Zeilenumbruch beim Kopieren Java Basics - Anfänger-Themen 3
S Zeilenumbruch awt.textarea Java Basics - Anfänger-Themen 16
M BufferedReader.readline() Unix/Windows Zeilenumbruch Java Basics - Anfänger-Themen 4
J Zeilenumbruch in Java Java Basics - Anfänger-Themen 2
J Zeilenumbruch in Java zwischen zwei Strings Java Basics - Anfänger-Themen 6
G Problem mit Zeichen Zeilenumbruch sieht aus wie(Eckige Null) Java Basics - Anfänger-Themen 4
V Zeilenumbruch bei der Eingabe verhindern Java Basics - Anfänger-Themen 6
W Text mit Zeilenumbruch zeichnen? Java Basics - Anfänger-Themen 5
S Weicher Zeilenumbruch? Java Basics - Anfänger-Themen 2
M Konsolenausgabe ohne Zeilenumbruch Java Basics - Anfänger-Themen 3
G Zeilenumbruch in einem String Java Basics - Anfänger-Themen 21
0 Zeilenumbruch funktioniert nicht Java Basics - Anfänger-Themen 4
N automatischer Zeilenumbruch Java Basics - Anfänger-Themen 3
N zeilenumbruch einfügen Java Basics - Anfänger-Themen 3
B Char Feld -> "Zeilenumbruch" Java Basics - Anfänger-Themen 5
M Am Ende eines Strings den Zeilenumbruch entfernen Java Basics - Anfänger-Themen 1
K Zeilenumbruch entfernen aus datei ?!?!? Java Basics - Anfänger-Themen 18
R Zeilenumbruch in einer Datei Java Basics - Anfänger-Themen 8
M sting komplett bearbeiten und nicht nach zeilenumbruch ende Java Basics - Anfänger-Themen 3
G Zeilenumbruch Java Basics - Anfänger-Themen 20
G Automatischer Zeilenumbruch bei einer TextArea Java Basics - Anfänger-Themen 16
G Zeilenumbruch in String variable Java Basics - Anfänger-Themen 4
F Zeilenumbruch Java Basics - Anfänger-Themen 9
L Plattformunabhängiger Zeilenumbruch Java Basics - Anfänger-Themen 2
G Zeilenumbruch aus String entfernen ? Java Basics - Anfänger-Themen 13
J neuer Zeilenumbruch in Datei Java Basics - Anfänger-Themen 7
L Zeilenumbruch Java Basics - Anfänger-Themen 3
D zeilenumbruch feststellen Java Basics - Anfänger-Themen 8
D zeilenumbruch EOF Java Basics - Anfänger-Themen 2
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
B In einem Label "Zeilenumbruch" Java Basics - Anfänger-Themen 4
T BufferedWriter Zeilenumbruch Java Basics - Anfänger-Themen 2
P Borland Jbuilder X - Zeilenumbruch im Source Code ? Java Basics - Anfänger-Themen 2
D FileWriter write? Zeilenumbruch ? Java Basics - Anfänger-Themen 4
T JTable, DB, Zeilenumbruch Java Basics - Anfänger-Themen 25
K Zeilenumbruch in Datei schreiben Java Basics - Anfänger-Themen 2
V Zeilenumbruch in Tooltips Java Basics - Anfänger-Themen 13
T readLine ohne anschließenden Zeilenumbruch? Java Basics - Anfänger-Themen 2
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
G gesteuerter Zeilenumbruch Java Basics - Anfänger-Themen 2
G jEditorPane: inhalt ohne zeilenumbruch darstellen. wie? Java Basics - Anfänger-Themen 3
D Zeilenumbruch & Überschrift Java Basics - Anfänger-Themen 12
N Zeilenumbruch im StringTokenizer?? Java Basics - Anfänger-Themen 4
B Zeilenumbruch blos wie? Java Basics - Anfänger-Themen 4
M Zeilenumbruch im Textfeld Java Basics - Anfänger-Themen 5
G automatischer Zeilenumbruch Java Basics - Anfänger-Themen 5
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
Tom/S JLabel Icon Farbe Java Basics - Anfänger-Themen 2
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
S Kontrollieren, ob ein Jlabel nicht sichtbar ist Java Basics - Anfänger-Themen 6
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
CptK Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
CptK JLabel im Array Java Basics - Anfänger-Themen 2
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben