ein paar Fragen - mit KSKB

Status
Nicht offen für weitere Antworten.
S

soundneeded

Gast
Hi Leute,

ich versuche mir seit ein paar Wochen Java beizubringen und hab aufgrund von Fragen die sich mir gerade stellen ein KSKB geschrieben.

---------------
Frage 1: Mit welchem Befehl lasse ich ein komplettes Fenster neuzeichnen? Im KSKB übernimmt das jetzt ein setVisible(false) gefolgt von einem setVisible(true). Das ist nicht sehr schön, aber repaint() kann ich hier anscheinend nicht anwenden.

---------------
Frage 2: wenn ich ein canvas habe und ich Menüs anschauen will die beim "ausrollen" über das canvas reichen, so ist der teil des Menüs nicht zu sehen der dann hinter dem canvas liegt. Muss ich hier irgendwie das menü vor das canvas legen?

Im KSKB ist das leicht zu beobachten...einfach im GridLayout-Aufruf das (1,2) in (2,1) ändern...schon ist das canvas "südlich" des Menüs.

Um schnell an die gewünschten Stellen zu kommen könnt ihr nach "Frage1" und "Frage2" suchen...dann kommt ihr in die richtige Zeile!

----------------
Frage 3:
Abseits vom KSKB.

Kann ich die Größe eines Fensters abhängig vom Inhalt machen? Beispiel: ich hab ne Liste mit x Elementen, die eine möglichkeit wäre das Fenster scrollable zu machen, die andere das Fenster(solange x nicht zu groß wird) anzupassen. Natürlch hab ich die Möglichkeit die benötigte Fenstergrösse anhand von x zu errechnen, aber vielleicht gibt es ja sowas auch schon in den JFrame-Möglichkeiten und ich habs nur übersehen. Vielleicht kann mir hier jemand ein Stichwort geben nach dem ich die API durchforsten kann.


Dabei belass ich es erstmal, ist ja schon eine ganze Menge die ich da frage. Ich habe versucht es Euch so leicht wie möglich zu machen. Freu mich auch auf Kritik wie ich es meinen Helfern das nächste Mal noch einfacher machen kann.
Großes Dankeschön an alle die sich die Zeit nehmen.

beste Grüße
Andi





Code:
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


class ding{
	int zahl;
	ding(){zahl=0;}	// Konstruktor setzt die zahl auf 0 der OK_Button den man mit dem Menüpunkt aufruft setzt die zahl auf 1. 
                               //Sie existiert lediglich um zu überprüfen, ob das Canvas auch wirlich neu gezeichnet wird.
}


public class kskp extends JFrame{

	
	final ding iks = new ding();
	
	kskp(){
		super("TestKSKP");
	
		setSize(200,200);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		setResizable(false);
		setLayout(new GridLayout(1,2));			// hier (1,2) zu (2,1) ändern für Frage2 
		
		JMenuBar mbar = new JMenuBar();
		add(mbar);
		JMenu men = new JMenu("Menü");
		mbar.add(men);
		JMenuItem mItem = new JMenuItem("Menüpunkt");
		men.add(mItem);

		Canvas zeichnen = new Canvas(){					// diese Zeichenfläche steht stellvertretend für alle die im eigentlichen Progi im Fenster vorkommen
			public void paint(Graphics g){
				g.drawString(String.valueOf(iks.zahl), 10, 10);		// hier steht die Zahl die mit dem ok-button aktualisiert werden soll
			}
		};
		add(zeichnen);
		
		ActionListener al_Fenstal = new ActionListener() {
			public void actionPerformed(ActionEvent e){
				
				// ein neues Fenster mit dem Button wird erzeugt
				final JFrame fenstal = new JFrame("Fenstal");
				fenstal.setSize(50,80);
				fenstal.setLocation(200,200);
				JButton okButton = new JButton("OK");
				fenstal.add(okButton);
				
				
				ActionListener al_Button = new ActionListener() {	// wenn der Button gedrückt wird...
					public void actionPerformed(ActionEvent e){
						iks.zahl=1;
						fenstal.dispose();

//						dispose();    // damit wollte ich nur überprüfen ob ich aufs richtige Fenster "zugreife"....tu ich
						 			  // mit welchem Befehl aber lass ich das Fenster neu zeichnen?  (Frage1)


						
						setVisible(false); setVisible(true); 		// das funktioniert ist aber nicht sehr schön
						
/*						
						// folgenden Umweg könnt ich mir vorstellen....funktioniert aber auch noch nicht

						int component_anzahl = getComponentCount();		// zähl die Komponenten (zähl ich da eh das richtige?
						for (int i=0; i<component_anzahl; i++){			// und führe für jedes einzelne repaint() aus
							System.out.println(i);
							getComponent(i).repaint();
						}
*/						
						
					}
				};
				
				okButton.addActionListener(al_Button);
				fenstal.setVisible(true);
				fenstal.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			}
		};
		
		mItem.addActionListener(al_Fenstal);
		
		setVisible(true);
		
		
	}
	
	
	
	
	
	
	public static void main(String[] args) {
		
		new kskp();	
		
	}
}
 

André Uhres

Top Contributor
soundneeded hat gesagt.:
..ich versuche mir seit ein paar Wochen Java beizubringen und hab aufgrund von Fragen
die sich mir gerade stellen ein KSKB geschrieben....
Erstmal ein ganz grosses Lob, weil du dir die Mühe gemacht hast ein KSKB zu machen.
Diese Vorgehensweise sollten sich alle Anfänger (und Fortgeschrittene) zum Beispiel nehmen.
Nur ein kleiner Hinweis: die Klassennamen schreibt man immer mit grossem Anfangsbuchstaben.

1. Ersetze Canvas durch JPanel (AWT Komponenten vertragen sich nicht besonders gut mit Swing),
dann geht's auch mit repaint().

2. Die Ursache ist hier die gleiche wie bei Frage 1.
AWT Komponenten vertragen sich nicht besonders gut mit Swing: Ersetze Canvas durch JPanel dann geht's.

3. JFrame#pack()

Gruß,
André

[EDIT] Achja, noch was: achte bitte darauf, daß dein Code nicht zu "breit" wird, sonst muss man immer horizontal
scrollen um den Text lesen zu können. Du kannst das auch nachträglich verbessern indem du deinen Beitrag editierst.
 

Leroy42

Top Contributor
Wo ihr gerade dabei seid.

Kann mir jemand verständlich erläutern was es nun eigentlich mit diesen
Methoden invalidate(), validate() und revalidate() auf sich hat? Also wofür
ist welche Methode gedacht und wie sind sie korrekt einzusetzten.

Bis heute hab' ich es nicht gerafft, die Erklärung in der Doku zu verstehen und
mir so weitergeholfen, je nach Anwendungsfall, ein oder mehrere dieser Methoden
aufzurufen bis es schließlich geklappt hat.

Aber irgendwann will ich doch auch mal wissen was ich mache :autsch:
 

André Uhres

Top Contributor
Leroy42 hat gesagt.:
Kann mir jemand verständlich erläutern was es nun eigentlich mit diesen
Methoden invalidate(), validate() und revalidate() auf sich hat? Also wofür
ist welche Methode gedacht und wie sind sie korrekt einzusetzten...
Ich versuch mal mein Glück:

Mit invalidate() werden ein Container und seine Parents als invalid markiert,
d.h.daß sie dann mit validate() ans Layout angepasst werden können (Grösse und Position).

validate() ist ziemlich klar in der API dokumentiert:
The validate method is used to cause a container to lay out its subcomponents again.
It should be invoked when this container's subcomponents are modified
(added to or removed from the container, or layout-related information changed)
after the container has been displayed.

revalidate() ist sehr praktisch weil damit invalidate() und validate() kombiniert werden
und sollte deshalb vorzugsweise benutzt werden.

revalidate() wird in Swing meistens automatisch aufgerufen,
so daß man sich meistens um den ganzen Kram nicht zu künmmern braucht.

Ein Geheimnis hab ich allerdings noch nicht lüften können:
manchmal muss man nach revalidate() auch noch repaint() aufrufen. (*)
Man muss halt zuerst probieren ob's mit revalidate() genug ist, was auch meistens so ist.

Ich weiss, daß mit diesem Beitrag nicht alles geklärt ist,
mehr kann ich momentan auch nicht dazu sagen.
Ich hoffe trotzdem, daß es für dich in wenig klarer geworden ist.

EDIT:
(*) Ein Beispiel: ich entferne ein JPanel aus einem Container, etwa so:
Code:
mainpanel.remove(mypanel);
mainpanel hat FlowLayout und mypanel ist die einzige Komponente in mainpanel.
Dann mach ich dies:
Ich rufe revalidate auf dem mainpanel auf, aber mypanel wird immer noch angezeigt.
Ich rufe repaint auf dem mainpanel auf, und mypanel verschwindet korrekt.
Jedoch arbeitet revalidate richtig, wenn mehrere Komponenten in
mainpanel sind und die remove Operation andere Komponenten beeinflusst.
Um sicher zu sein, sollten wir nach dem Entfernen einer Komponente immer revalidate UND repaint aufrufen.
 

Leroy42

Top Contributor
Ich denke schon, Danke! :D

Nach deinen Erklärungen, kommt es mir vor, als ob dieses revalidate() eingeführt
wurde, um Dummies wie mir, die richtigen Aufrufe der anderen beiden Methoden
abzunehmen.

Wenn du schreibst, das es manchmal nötig sei, dem revalidate() ein
repaint() folgen zu lassen, könnte ich zwar immer beide Methoden aufrufen;
irgendwie jedoch widerspricht das meinem innersten, minimalistischen Wesen und
erzeugt unangenehme Kribbelgefühle :(

Bis ich's mal vollständig kapiert haben werden, werde ich mir am Besten auch
so behelfen, es ersteinmal ohne repaint() zu versuchen und zu hoffen, daß sich
das Programm, in verschieden Zuständen, unterschiedlich benimmt.

Dennoch danke erstmal
 

Illuvatar

Top Contributor
Soweit ich weiß, ruft validate repaint auf... Ich habe jedenfalls noch nie beide hintereinander benötigt. ;)
 

André Uhres

Top Contributor
Illuvatar hat gesagt.:
Soweit ich weiß, ruft validate repaint auf...
Das müsste auch eigentlich so sein. Der Fall wo ein zusätzliches repaint() benötigt wird ist so selten,
daß ich jetzt kein Beispiel bereit hab. Sobald eines auftaucht werde ich es aber hier reinstellen.
 

André Uhres

Top Contributor
S

soundneeded

Gast
Hi André, Hi Leute,

Danke für die kompetente Hilfe.
Ich meld mich erst jetzt, da ich vorher alles ausprobieren und auch überprüfen wollte, ob sich nicht andere Probleme daraus ergeben.
Zuerst: André..grosses Dankeschön an Dich, schneller kann Hilfe nicht greifen :).
Eines kleines Problem hat sich aber auch ergeben. Und zwar ein grafisches, dass weg ist sobald ich das Fenster neuzeichnen lasse.
Also ich starte mein Programm, das Hauptfenter öffnet sich...aber leider mit dem Problem, dass das obere Viertel des Fensterinhalts nochmal über dem unteren Viertel liegt.

screenshot.gif



Sobald ich repaint() aufrufe ist das Problem beseitigt. Jetzt stellt sich mir die Frage, was er beim ersten Zeichnen anders macht als beim darauffolgenden repaint(). Mir fällt aber nichts dazu ein. Vielleicht ja Euch.

Beste Grüße
Andreas
 

André Uhres

Top Contributor
soundneeded hat gesagt.:
..Sobald ich repaint() aufrufe ist das Problem beseitigt..
versuch's mal mit paintComponent anstatt paint:
Code:
public void paintComponent(Graphics g){
   super.paintComponent(g);
   ...
}
 
S

soundneeded

Gast
Der Aufruf des Fensters ist wie in obigem KSKB der einzige bisherige Eintrag in der main().

Ich hab das Problem mit der Grafik jetzt erstmal so gelöst, dass ich statt new Classname() gleich new Classname().repaint() verwende. Auch wenn es so funktioniert würde ich mich freuen, wenn jemand einen Tipp hat woran es liegen könnte.

Beste Grüße
 

virtualAudio

Aktives Mitglied
Hab mich jetzt registriert und bin nun als virtualAudio hier.
(falls mir jemand per PM helfen will ;) )

Gruhs
Andreas a ka soundneeded a ka Gast
 

André Uhres

Top Contributor
Anonymous hat gesagt.:
... Problem bleibt aber leider bestehen.
Ohne Code kann ich dann auch nichts mehr machen.
Der Code müsste aber komplett sein.
(Falls das zu umfangreich für's Forum wird, könntest du ihn per Email schicken.
Es wäre mir dann allerdings lieber du würdest dich registrieren damit ich eine PN (Private Nachricht )
mit meiner Adresse schicken kann.)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
T Ein paar Fragen zu OOP und Java. Java Basics - Anfänger-Themen 16
K Java Anfänger und paar Fragen=D Java Basics - Anfänger-Themen 7
J Paar Fragen zu Exceptions Java Basics - Anfänger-Themen 16
C Umsteiger hat noch ein paar Fragen Java Basics - Anfänger-Themen 11
StrikeTom Ein paar(2) Fragen zu throws und try + catch Java Basics - Anfänger-Themen 6
T ein paar fragen Java Basics - Anfänger-Themen 10
Antoras Ein paar theoretische Fragen Java Basics - Anfänger-Themen 19
A Primzahlen: ein paar offene Fragen Java Basics - Anfänger-Themen 2
A Paar Fragen zu Applet u.a. Java Basics - Anfänger-Themen 2
0x7F800000 Ein paar noob-fragen zu java ME Java Basics - Anfänger-Themen 5
G Threads brauche da gilfe für paar fragen Java Basics - Anfänger-Themen 5
S ein paar kleine Fragen Java Basics - Anfänger-Themen 4
N ein paar L&F Fragen Java Basics - Anfänger-Themen 7
P Erste Schritte Bitte ein paar Erklärungen zu meinem Code Java Basics - Anfänger-Themen 6
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
M Paar Probleme mit 3 Klassen Java Basics - Anfänger-Themen 23
C Array - Ein paar Verständnisfragen Java Basics - Anfänger-Themen 9
K BufferedWriter schreibt die letzten paar Zeilen nicht Java Basics - Anfänger-Themen 5
I Ein paar Kleinigkeiten Java Basics - Anfänger-Themen 11
Luk10 Datentypen Werte-Paar Java Basics - Anfänger-Themen 4
B Paar kleine Grundsatzfragen zu Java Java Basics - Anfänger-Themen 5
Nicer ! Problem nach paar Bierchen erkannt aber nicht gebannt ! Java Basics - Anfänger-Themen 7
I Ein paar Syntaxfragen... Java Basics - Anfänger-Themen 3
D Arrays und paar Möglichkeiten mit denen Java Basics - Anfänger-Themen 3
G Brauche ein paar erklärungen zu Quelltext Java Basics - Anfänger-Themen 5
A paar bilder auf einmal Java Basics - Anfänger-Themen 3
R Strings und dazu ein paar methoden Java Basics - Anfänger-Themen 12
A taschenrechner mit radioButtons aber ein paar problemen Java Basics - Anfänger-Themen 5
V Könnt ihr mal über Paar antworten schauen(Hausaufgaben) Java Basics - Anfänger-Themen 7
G Hoffe jemand kann mir ein paar Tips geben:binärer Suchbaum Java Basics - Anfänger-Themen 3
R Noch ein paar Anfängerfragen. Java Basics - Anfänger-Themen 4
S Ein paar Anfängerfragen Java Basics - Anfänger-Themen 17
M Zeilenausgabe auf ein paar Zeichen begrenzen Java Basics - Anfänger-Themen 2
A Habt ihr ein paar ideen für Programme? Java Basics - Anfänger-Themen 8
G Doppelte (Paar) Werte in einem Vektor finden Java Basics - Anfänger-Themen 6
B Bräuchte ein paar Sachen für mein Clientprogramm! Java Basics - Anfänger-Themen 6
megachucky Suche ein paar gute Tutorials so wie dieses hier. Java Basics - Anfänger-Themen 4
P Bitte um ein paar Tipps! (Threads, Warten auf Ereignisse,.) Java Basics - Anfänger-Themen 2
G Ein paar Definitionsfragen Java Basics - Anfänger-Themen 4
B Paar richtige Anfängerfragen Java Basics - Anfänger-Themen 7
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben