swing / awt

Status
Nicht offen für weitere Antworten.

Bit2_Gosu

Bekanntes Mitglied
Hi !

Ich hab zwei Fragen

1: Ich benutz lauter swing-Lomponenten wie JButton JCheckbox etc. etc.. In der FAQ steht, swing und awt nciht mischen, wie kann ich denn dann folgenden imports, die ich auch benutze, durch swing-Komponenten ersetzen ?

Code:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


2: Ich hab eine Liste von Strings die untereinander ausgegeben werden sollen, nachdem auf einem JFrame ein Button geklickt wurde. Soll ich diese in einem Canvas (ja, ich weiß awt.) oder auf einem JFrame als Labels ausgeben lassen ?


Vielen Dank für Eure Hilfe !
 

The_S

Top Contributor
Zu 1.) Gar nicht, es geht darum Anzeige-Komponenten nicht zu mischen, also keine Heavy mit Light-Weight Komponenten.
Zu 2.) Du setzt dir ein JPanel als ContentPane und addest darauf dynamisch JLabels mit deinem gewünschten Inhalt.
 

Bit2_Gosu

Bekanntes Mitglied
Ok gut !

zu 2: Ich habe auf einem JPanel mit dem GridLayout (4,2) einen Button. Wenn der geklickt wird, sollen unter den bisherigen Labels und Checkboxes etc. eine Auflistung einer Reihe von String in einer Spalte erfolgen.

Deshalb hab ich folgendes probiert: Wenn der Button geklickt wird:

Code:
JLabel test = new JLabel("blaaa");
contentPane.add(test);
contentPane.setLayout(new GridLayout(5,0));
contentPane.updateUI();

Das ist jetzt freilich nur ein String ("blaa"), aber da sollen noch viel mehr JLabels dazukommen.

Das klappt so im Prinzip auch, nur hab ich ein Problem. Das JPanel richtet beim ersten Start seine Größe ja immer schon so ein, dass alle Komponenten in schöner Größe aufgelistet werden.
Nach dem Button klick, ändert sich die Größe des JPanels aber nicht mehr und die neuen Strings werden in das bestehende kleine JPanel reingeklatscht, so dass alle Labels etc. viel zu klein werden.

Ich bräuchte also einen Befehl, der nicht nur den JPanelinhalt updatet, sondern auch die JPanel Größe..

Kann mir da jemand weiterhelfen ??
 

The_S

Top Contributor
contentPane.updateUI(); lässte weg. Stattdessen schreibste validate(). Um die größe deines Panels anzupassen rufst du den Befehl "pack()" auf dein Frame auf.
 

Bit2_Gosu

Bekanntes Mitglied
Hm ok das mit dem validate() klappt, nur eigentlich hab ich gar kein instatiertes Frame, auf das ich pack() anwenden könnte...

Hier mein Code:

Code:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.JComboBox;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Set;
import java.util.Iterator;


public class Interface extends JFrame implements ActionListener
{
	static final long serialVersionUID = 1L;
	JPanel contentPane;
	JLabel[] label;
	JCheckBox[] checkbox;
	JButton button;
	JComboBox box;	
	Reader reader;
	Matcher matcher;
	
	
	public Interface ()
	{
		super("Super Richys Lantool");
		
		
		reader = new Reader();
		matcher = new Matcher();
		
		reader.dateiEinlesen("D:/spieler.ini");
		
		contentPane = new JPanel();	
		
		contentPane.setLayout(new GridLayout(4,2));
		
		label = new JLabel[reader.map.size()];a
		checkbox = new JCheckBox[reader.map.size()];
		
		Set <String> keySet = reader.map.keySet();
		
		Iterator <String> it = keySet.iterator();
		
		int i = 0;
		while (it.hasNext())
		{
			label[i] = new JLabel(it.next());
			checkbox[i] = new JCheckBox("",true);
			contentPane.add(label[i]);
			contentPane.add(checkbox[i]);
			i++;
		}
		
		
		button = new JButton("starten");
		
		String[] values = {"1","2","3","4","5","6","7","8","9","10"};
		box = new JComboBox(values);
		
		button.addActionListener(this);
			
		contentPane.add(box);
		contentPane.add(button);		
		
		setContentPane(contentPane);
		
		
	}
	
	public void actionPerformed (ActionEvent ae)
	{
		if(ae.getSource()==button)
		{
			matcher.pSpeicher.clear();
			for (int i = 0; i < label.length; i++)
			{
				if (checkbox[i].isSelected())
				{
					matcher.pSpeicher.add(label[i].getText());
				}				
			}
			//System.out.println(((Integer)box.getSelectedItem()).intValue());
			//matcher.auswerten(((Integer)box.getSelectedItem()).intValue());		
			
			JLabel test = new JLabel("blaaa");
			contentPane.add(test);
			contentPane.setLayout(new GridLayout(5,0));
			contentPane.validate();
			
		}		
	}	
}


Wenn ich einfach sage global: JFrame frame;

und dann: frame = new JFrame();

und dann nach validate() frame.pack() hat das irgendwie keinen Effekt...
 

The_S

Top Contributor
naja, deine Klasse ist das JFrame, da du von ihr erbst. Folglich genügt ein

Code:
pack();

oder

Code:
this.pack();
 

Bit2_Gosu

Bekanntes Mitglied
Ah super, danke ! Das mit der Größe klappt nun.

Nur das mit dem Layout nicht. Es ist wohl so, das er das GridLayout (5,0) nicht nur auf den neuen Teil des JPanels (Die Strings), sondern auf den ganzen bezieht...

Es entsteht als ziemliches Chaos. Prinzipiell soll der alte Teil genauso bestehen bleiben, nur es soll halt darunter eine Spalte mit Strings...

Wie könnte man sowas denn machen, wenns so net geht ??
 

The_S

Top Contributor
Naja, das Layout bezieht sich auf den Container, den du es zugewiesen hast. Wenn ein Bereich der GUI davon außenvor bleiben soll, musst du mit verschachtelten Layouts arbeiten.
 

The_S

Top Contributor
Du hast ein Haupt-Panel. Diesem Panel weißt du ein Layout zu. Z. B. ein BorderLayout. Oben addest du dann ein neues JPanel das deine Eingabefelder enthält. In der Mitte kommt dann wiederrum ein anderes JPanel rein, das dann deine JLabels enthält.
 

Bit2_Gosu

Bekanntes Mitglied
ok super, jetzt hab ich was wichtiges dazu gelernt ! :wink: Findes auch toll, das man hier so super Hilfe bekommt !


Allerdings macht der mir immer noch Probleme. hier erst mal mein neuer Code:

Code:
public class Main
{
	public static void main(String args[])
	{
		JFrame rahmen = new Interface();
		
		rahmen.setSize(300,200);
		rahmen.setVisible(true);
	}
}

Code:
public class Interface extends JFrame implements ActionListener
{
	static final long serialVersionUID = 1L;
	JPanel borlayPane;
	JPanel topPane;
	JPanel stringPane;
	JLabel[] label;
	JCheckBox[] checkbox;
	JButton button;
	JComboBox box;	
	Reader reader;
	Matcher matcher;
	
	
	public Interface ()
	{
		super("Super Richys Lantool");
		
		
		reader = new Reader();
		matcher = new Matcher();
		
		reader.dateiEinlesen("D:/spieler.ini");
		
		borlayPane = new JPanel();		
		topPane = new JPanel();	
		stringPane = new JPanel();
		
		borlayPane.setLayout(new BorderLayout());
		topPane.setLayout(new GridLayout(4,2));
		stringPane.setLayout(new GridLayout(5,0));
		
		label = new JLabel[reader.map.size()];
		checkbox = new JCheckBox[reader.map.size()];
		
		Set <String> keySet = reader.map.keySet();
		
		Iterator <String> it = keySet.iterator();
		
		int i = 0;
		while (it.hasNext())
		{
			label[i] = new JLabel(it.next());
			checkbox[i] = new JCheckBox("",true);
			topPane.add(label[i]);
			topPane.add(checkbox[i]);
			i++;
		}		
		
		button = new JButton("starten");
		
		String[] values = {"1","2","3","4","5","6","7","8","9","10"};
		box = new JComboBox(values);
		
		button.addActionListener(this);
			
		topPane.add(box);
		topPane.add(button);	
				
		borlayPane.add(topPane,BorderLayout.NORTH);
		borlayPane.add(stringPane,BorderLayout.CENTER);
		setContentPane(borlayPane);			
		
	}
	
	public void actionPerformed (ActionEvent ae)
	{
		if(ae.getSource()==button)
		{
			matcher.pSpeicher.clear();
			for (int i = 0; i < label.length; i++)
			{
				if (checkbox[i].isSelected())
				{
					matcher.pSpeicher.add(label[i].getText());
				}				
			}
			
			//matcher.auswerten(((Integer)box.getSelectedItem()).intValue());		
			matcher.auswerten(box.getSelectedIndex()+1);
			
			stringPane.setLayout(new GridLayout(matcher.messages.size(),0));
			
			JLabel[] stringLabel = new JLabel[matcher.messages.size()];
			for (int i=0; matcher.messages.size() > 0; i++)
			{
				stringLabel[i] = new JLabel(matcher.messages.poll());
				stringPane.add(stringLabel[i]);
			}				
			
			pack();			
		}		
	}	
}

(nach Buttonklicken passiert nix anderes, als das dem stringPane eine verschiedene Anzahl an Labels zugefügt wird.
validate() hab ich weg, weil pack() gleich mit validated.)

Nun wird das ganze erst mal mit den Maßen gestartet, in denen ich JFrame in der Main aufgerufen hab (auch wenn ich am Ende des Interface Konstruktors ein pack() mit einbaue !)
Wenn ich den Button Klicke, wird zwar alles Gridmäßig korrekt dargestellt, aber das Fenster verkleinert sich so, dass die Inhalte grade Platz haben um nicht verkleinert dargestellt zu werden.

Einmal hätt ich gern, dass vor Buttonklick = NachButtonklick von der Größe des JFrame her.

Und megatoll wärs noch, wenn trotz pack() sich zu den JFrame Seitenrändern hin ein gewisser Mindestabstand erhalten ließe.

Geht sowas ??

Wäre natürlich super :wink:
 

The_S

Top Contributor
Bit2_Gosu hat gesagt.:
Wenn ich den Button Klicke, wird zwar alles Gridmäßig korrekt dargestellt, aber das Fenster verkleinert sich so, dass die Inhalte grade Platz haben um nicht verkleinert dargestellt zu werden.

pack setzt die größe des Frames auf die minimale Größe!

Bit2_Gosu hat gesagt.:
Einmal hätt ich gern, dass vor Buttonklick = NachButtonklick von der Größe des JFrame her.

:bahnhof:

Bit2_Gosu hat gesagt.:
Und megatoll wärs noch, wenn trotz pack() sich zu den JFrame Seitenrändern hin ein gewisser Mindestabstand erhalten ließe.

Du kannst deinem GridLayout noch zwei Parameter im Konstruktor mit angeben, die den Abstand der einzelnen Kästchen zueinander bestimmt. Das Betrifft aber imho nicht die Seitenränder. Eine Möglichkeit wäre nach dem pack() über getHeight und getWidth die aktuelle Größe des JFrames abzufragen und dann mit setSize ein paar Pixel größer wieder zu setzen. Oder du packst einfach zu allen Seiten noch ein JPanel/JComponent/... rein und setzt da die Breite auf z. B. 5 Pixel.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
J XML Viewer for Swing Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
G Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
J Java GUI in Swing und das MVC Paradigma Java Basics - Anfänger-Themen 3
M Swing Java Basics - Anfänger-Themen 7
G Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben