Komponente zur Laufzeit hinzufügen und RICHTIG anzeigen

Anton2k

Aktives Mitglied
Hallo
Ich möchte ein Log etwas Grafisch aufpeppen, dazu habe ich mir eine eigene Komponente geschrieben welche auf einem JPanel aufsetzt.
Es gibt ein pannel mit BoxLayout was sie Aufnimmt, und eine JScrollPane in welchem das pannel sitzt.
Lasse ich mir beliebig viele Komponenten zum Programmstart mit dem GUI erstellen klappt alles wunderbar.
Sollen jetzt aber zur Laufzeit neue Komponenten hinzugefügt werden gibt es probleme.
Die Komponenten werden ins pannel aufgenommen und angefügt. Ich rufe revalidate() auf und sie sind zu sehen...aber nur ein kleines stück. Sprich mein Pannel wächst nicht richtig mit.
Packe ich jetzt den Rand des Hauptfensters an und vergrößere die Anwendung (Der ScrollPanel bereich bleibt immer gleich groß), wird auf einmal alles richtig angezeigt.

Es muss also meines erachtens auser revalidate noch einen anderen Befehl geben der für die richtige Darstellung sorgt ohne das ich manuell das Hauptfenster vergrößern oder kleinern muss.
 

Anton2k

Aktives Mitglied
Klappt irgendwie nicht.
Hab es mal zusammen gepackt und als kleines Testprogramm hochgeladen
http://sroot.marburgerfilmgroup.de/test.jnlp
Dem Senden Button hab ich mal die Funktionalität zum hinzufügen verpasst.

Und etwas Code der hilft vieleicht auch noch:
Code:
//Chatpanel, ist der Container für die meine Componente
package test;

import javax.swing.BoxLayout;
import javax.swing.JPanel;

public class ChatPanel extends JPanel {
	
	public ChatPanel(){
		
		setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));

	}

}

Code:
//das ist mein Fenster im Endeffetk das alles enthält ich habe es mal auf das was relevant ist gekürtzt

package test;

import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;




public class South extends JPanel implements ActionListener{

	
	public ChatPanel chatPanel=new ChatPanel();
	public JScrollPane scrollBox=new JScrollPane(chatPanel);
	

	public South(){
		
            GroupLayout mainPanelLayout = new GroupLayout(this);
	    setLayout(mainPanelLayout);
	    mainPanelLayout.setAutoCreateGaps(true);
	    mainPanelLayout.setAutoCreateContainerGaps(true);
	    
	    mainPanelLayout.setHorizontalGroup( 
****Layout Kram gekürtzt, hier wird der Scrollbox ihre feste größe zugewiesen*****)
	    
	    sendeButton.addActionListener(this);
	}


	public void actionPerformed(ActionEvent e) {
		chatPanel.add(new MeinLabel("Hallo du langer text Hhallo du langer text Hhallo du langer text Hhal\nlo du langer text Hhallo du langer text Hhallo du langer text ","Hallo du da noch ein langer langer text",15,Color.white,Color.red,-1));
		chatPanel.revalidate();
		chatPanel.repaint();
	}

}

Das meine Feld noch nicht ganz die Breite ausfüllt soll erst einmal egal sein das ist ein denkfehler von mir gewesen den ich selbst behoben bekomme. Aber dieses Anfügen und nicht richtig angezeigt werden ist merkwürdig bzw. weiss ich nicht wie ich es lösen soll.
 

Anton2k

Aktives Mitglied
Ok habe das Problem schon wieder etwas eingegrenzt. Indem ich meiner Komponente das Revalidate() verpasst habe klapt jetzt schon mal alles soweit das es vollständig angezeigt wird. Mein chatPanel wächst also entsprechend der größe der Komponenten mit.
Nur die Scrollbox mag noch nicht so richtig. Ich kann zwar den Vertikalen Scrollbar anfassen und ganz runter scrollen, was mir die letzte hinzugefügte Komponente komplett anzeigt, der Scrollbar selbst merkt aber erst wenn ich ihn dann wieder loslasse was sein Maximum ist.
Da ich aber nach dem Hinzufügen meines Panels automatisch ans ende scrollen lassen möchte muss er das direkt mitbekommen wo er hinzugehen hat.
Hab mal anstelle meines Labels eine JLabel eingefügt und damit klappt es ohne umweg wie es funktionieren soll.
Also muss was an meiner MeinLabel komponente falsch sein darum poste ich diese auch noch mal hier:
Code:
import java.awt.*;
import javax.swing.*;


public class MeinLabel extends JPanel {

	private String textZeile1, textZeile2;
	private String[] textZeilen1,textZeilen2;
	private int schriftGroesse;
	private int zeilenHoehe;
	private boolean datenErfasst=false;
	private int feldHoehe=0;
	private Color textFarbe=Color.black,hintergrundFarbe=Color.white;
	private int feldBreite=50;
	private int besitzerID=-1;
	
	public int getSchriftGroesse() {
		return schriftGroesse;
	}

	public void setSchriftGroesse(int schriftGroesse) {
		this.schriftGroesse = schriftGroesse;
		datenErfasst=false;
		berechneAussehen();
	}

	public int getBesitzerID() {
		return besitzerID;
	}	
	
	public Color getTextFarbe() {
		return textFarbe;
	}

	public Color getHintergrundFarbe() {
		return hintergrundFarbe;
	}

	public void setFarben(Color textFarbe, Color hintergrundFarbe) {
		this.hintergrundFarbe = hintergrundFarbe;
		this.textFarbe=textFarbe;
	}

	public MeinLabel(String text,int schriftGroesse, Color textFarbe, Color hintergrundFarbe, int id ) {
		this.textZeile1=text;
		this.schriftGroesse=schriftGroesse;
		this.setOpaque(true);
		this.setBackground(getHintergrundFarbe());
		this.hintergrundFarbe = hintergrundFarbe;
		this.setBackground(getHintergrundFarbe());
		this.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, hintergrundFarbe.darker()));
		
	}

	public MeinLabel(String text,String text2, int schriftGroesse, Color textFarbe, Color hintergrundFarbe, int id) {
		this.textZeile1=text;
		this.textZeile2=text2;
		this.schriftGroesse=schriftGroesse;
		this.setOpaque(true);
		this.textFarbe=textFarbe;
		this.hintergrundFarbe = hintergrundFarbe;
		this.setBackground(getHintergrundFarbe());
		this.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, hintergrundFarbe.darker()));
		
	
	}
	
	public void berechneAussehen(){
		feldBreite=this.getSize().width-15;
		FontMetrics fm = getFontMetrics(new Font("Helvetica", Font.PLAIN,  schriftGroesse));
		if (fm.stringWidth(textZeile1)>feldBreite-20){
			String[] temp=textZeile1.split(" ");
			String tempZeile="";
			int laengenZaehler=0;
			tempZeile+=temp[0];
			for (int i=1;i<temp.length;i++){					
				if ((fm.stringWidth(tempZeile+temp[i])-laengenZaehler)<(feldBreite-20)){
					tempZeile+=" "+temp[i];
				} else {
					tempZeile+="\n";
					laengenZaehler=fm.stringWidth(tempZeile);
					tempZeile+=temp[i];
				}
			}
			textZeilen1=tempZeile.split("\n");
			feldHoehe=fm.getHeight()*textZeilen1.length;
			

		} else {
			String tempZeile=textZeile1;
			textZeilen1=tempZeile.split("\n");
			feldHoehe=fm.getHeight()*textZeilen1.length;
			
		}
		if (textZeile2!=null){
			if (fm.stringWidth(textZeile2)>feldBreite-20){
				String[] temp=textZeile2.split(" ");
				String tempZeile="";
				int laengenZaehler=0;
				tempZeile+=temp[0];
				for (int i=1;i<temp.length;i++){					
					if ((fm.stringWidth(tempZeile+temp[i])-laengenZaehler)<(feldBreite-20)){
						tempZeile+=" "+temp[i];
					} else {
						tempZeile+="\n";
						laengenZaehler=fm.stringWidth(tempZeile);
						tempZeile+=temp[i];
					}
				}
				textZeilen2=tempZeile.split("\n");
				feldHoehe=feldHoehe+(fm.getHeight()*textZeilen2.length);
				
			} else {
				String tempZeile=textZeile2;
				textZeilen2=tempZeile.split("\n");
				feldHoehe=feldHoehe+(fm.getHeight()*textZeilen2.length);
				
			}
		}
		
		zeilenHoehe=fm.getHeight();			
		datenErfasst=true;
		setPreferredSize(new Dimension(feldBreite,feldHoehe+5));

		revalidate();
	}
	
	@Override
	public void paintComponent(Graphics g){ 
		super.paintComponent(g);
		
		if (!datenErfasst){
			berechneAussehen();
		}
		g.setFont(new Font("Helvetica", Font.PLAIN,  schriftGroesse));
		g.setColor(getTextFarbe());

		for (int i=0;i<textZeilen1.length;i++){
			g.drawString(textZeilen1[i],10,((zeilenHoehe)*(i+1)));
		}
		if (textZeilen2!=null){
			for (int i=0;i<textZeilen2.length;i++){
				g.drawString(textZeilen2[i],10,((zeilenHoehe*textZeilen1.length)+((zeilenHoehe)*(i+1))));
			}
		}
		
	}

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Komponente zur Laufzeit hinzufügen & Vergrößern einschrä AWT, Swing, JavaFX & SWT 3
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
darekkay Swing Komponente zur Laufzeit neuinitialisieren AWT, Swing, JavaFX & SWT 6
G Komponente zur Laufzeit tauschen. AWT, Swing, JavaFX & SWT 5
Maxim6394 JavaFX Scene Builder - Crash bei eigener Komponente AWT, Swing, JavaFX & SWT 2
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
temi JavaFX "Frames" in JavaFx - passende Komponente? AWT, Swing, JavaFX & SWT 13
J Swing Komponente wird unpassend angepasst in der Größe AWT, Swing, JavaFX & SWT 35
M4cM4rco0707 JavaFX Custom-Komponente mit Custom-Controller AWT, Swing, JavaFX & SWT 3
J Komponente wird manchmal falsch gezeichnet AWT, Swing, JavaFX & SWT 0
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
Q-bert Dynamische Komponente erzeugen AWT, Swing, JavaFX & SWT 6
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
Tom299 JavaFX Ähnliche Komponente wie der VB6 Frame? AWT, Swing, JavaFX & SWT 2
Tort-E JavaFX Daten an WebView Komponente AWT, Swing, JavaFX & SWT 1
G JPanel komponente Löschen AWT, Swing, JavaFX & SWT 7
T Swing Index für Komponente in JPanel? AWT, Swing, JavaFX & SWT 6
T Swing Größe einer Komponente in einem BoxLayout / FlowLayout festlegen AWT, Swing, JavaFX & SWT 7
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
P Warten auf komponente AWT, Swing, JavaFX & SWT 2
U LookAndFeel für eine Komponente AWT, Swing, JavaFX & SWT 2
E Mit Netbeans von einer Form auf eine Komponente einer anderen Form zugreifen AWT, Swing, JavaFX & SWT 2
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
T Komponente wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
S Swing Komponente wird überblendet AWT, Swing, JavaFX & SWT 27
A Swing Komponente mehrseitig ausdrucken AWT, Swing, JavaFX & SWT 2
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
B Swing Komponente an Position eines Objektes ausgeben lassen AWT, Swing, JavaFX & SWT 3
R Swing Komponente austauschen AWT, Swing, JavaFX & SWT 2
M JApplet mit Java 3D Komponente AWT, Swing, JavaFX & SWT 6
M Swing JMenu verdeckt durch Komponente (aber kein AWT und Swing mix!?) AWT, Swing, JavaFX & SWT 3
N Swing Java Komponente zur Darstellung von klickbaren Links, die Java Funktionen ausführen können AWT, Swing, JavaFX & SWT 2
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
S Spezielle komponente aktualisieren AWT, Swing, JavaFX & SWT 9
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
1 Swing Spaltenbreite and CellEditor- Komponente anpassen AWT, Swing, JavaFX & SWT 4
R Komponente wieder entfernen AWT, Swing, JavaFX & SWT 13
B Komponente "sauber" entfernen(JToolBar) AWT, Swing, JavaFX & SWT 4
xehpuk Swing Komponente in Graustufen zeichnen AWT, Swing, JavaFX & SWT 2
A Swing GlassPane Cursor wird bei fremder Komponente nicht angezeigt AWT, Swing, JavaFX & SWT 3
K Swing Komponente als Bild speichern AWT, Swing, JavaFX & SWT 11
F visuelle Komponente AWT, Swing, JavaFX & SWT 3
padde479 Komponente gesucht AWT, Swing, JavaFX & SWT 2
A Swing Komponente für Swing und JSF durch MVC AWT, Swing, JavaFX & SWT 5
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
A Swing suche OpenSource Date(Time)Picker Komponente AWT, Swing, JavaFX & SWT 9
N Swing außerhalb des Hauptframe Komponente/Frame öffnen AWT, Swing, JavaFX & SWT 2
S Feste Position einer Komponente auf Glasspane AWT, Swing, JavaFX & SWT 6
B Erfragen der Komponente AWT, Swing, JavaFX & SWT 4
M Mausklick an darunterliegende Komponente weiterleiten AWT, Swing, JavaFX & SWT 9
B (Swing) Welche Komponente für unterteilten Text? AWT, Swing, JavaFX & SWT 4
D Wie nennt sich beschriebene Komponente? (-> Autocomplete) AWT, Swing, JavaFX & SWT 5
D Komponente im FlowLayout nicht mittig sondern rechts. Wie? AWT, Swing, JavaFX & SWT 4
G Swing Komponente gesucht (Textfeld mit Liste) AWT, Swing, JavaFX & SWT 2
padde479 Suche eine Komponente (->ToolBar) AWT, Swing, JavaFX & SWT 7
algorismi Browser Komponente AWT, Swing, JavaFX & SWT 3
G Swing Auswahlrechteck über Komponente zeichnen AWT, Swing, JavaFX & SWT 3
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
C Swing Komponente mit setLocation auf JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 3
G Gibt es diese Komponente? AWT, Swing, JavaFX & SWT 11
slawaweis Suche TagCloud Komponente für Swing AWT, Swing, JavaFX & SWT 10
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
M Combobox soll Farbe einer Komponente setzen AWT, Swing, JavaFX & SWT 2
H Swing Eigene Komponente reagiert falsch auf mouseClicked() AWT, Swing, JavaFX & SWT 5
D swt komponente in swing-frame AWT, Swing, JavaFX & SWT 4
hdi SWT Operation auf GUI-Komponente kommt mal wieder nicht an... AWT, Swing, JavaFX & SWT 9
N Suche nach Komponente / LaF AWT, Swing, JavaFX & SWT 21
T Swing Gibt es eine Komponente für eine farbliche Editorbox? AWT, Swing, JavaFX & SWT 6
S Swing Komponente mit jogl AWT, Swing, JavaFX & SWT 18
Airwolf89 Swing Von anderer Klasse auf Eigenschaften einer Komponente zugreifen AWT, Swing, JavaFX & SWT 5
SuperSeppel13 Komponente transparent übermalen AWT, Swing, JavaFX & SWT 2
I Swing Warten, bis eine GUI-Komponente aktualisiert ist? AWT, Swing, JavaFX & SWT 4
R Lineal an einer Komponente AWT, Swing, JavaFX & SWT 10
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Ham Swing PropertyChangeListener aufrufende Komponente AWT, Swing, JavaFX & SWT 5
hdi LayoutManager GridBagLayout : Komponente hat falsche Größe? AWT, Swing, JavaFX & SWT 2
hdi Swing Suche passende API Klasse(n) für meine Komponente AWT, Swing, JavaFX & SWT 8
Ä Graphics-Komponente auf JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
H Name einer Komponente ermitteln AWT, Swing, JavaFX & SWT 5
Developer_X Swing Problem beim "rezeichnen" -> Überzeichnen der Komponente AWT, Swing, JavaFX & SWT 8
M Suche Java Komponente AWT, Swing, JavaFX & SWT 2
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
B Swing setDefaultButton geht nicht - Komponente fängt Events ab AWT, Swing, JavaFX & SWT 5
A Suche TreeTable-Komponente AWT, Swing, JavaFX & SWT 12
GilbertGrape ActionListener implementieren oder Eigenen für jede Komponente? AWT, Swing, JavaFX & SWT 9
C Spaltenorientierte Komponente, ähnlich JTabbed gesucht AWT, Swing, JavaFX & SWT 4
V Suche Komponente AWT, Swing, JavaFX & SWT 2
G Coverflow -artige Komponente für Swing? AWT, Swing, JavaFX & SWT 2
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
Landei Welche Kalender-Komponente? AWT, Swing, JavaFX & SWT 3
G Komponente in der der Cursor steht zurückgeben? AWT, Swing, JavaFX & SWT 2
P Unsichtbare Komponente in ein Bild rendern? AWT, Swing, JavaFX & SWT 11
G Komponente die im Center und North Bereich liegt zurückgebe? AWT, Swing, JavaFX & SWT 6
O Zwei Listener auf Komponente, warten auf Beendigun? AWT, Swing, JavaFX & SWT 2
G Kennt jemand diese Komponente? AWT, Swing, JavaFX & SWT 2
G Palette Komponente für Swing? AWT, Swing, JavaFX & SWT 8
M Name der Komponente? AWT, Swing, JavaFX & SWT 2
G Komponente oben positionieren (BorderLayout) AWT, Swing, JavaFX & SWT 3
ChaosNo1 Problem mit Komponente auf JPanel adden (beides abgeleitet) AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben