TextArea auf einem Bild

merTii

Mitglied
Hallo Freunde der Natur,

und zwar hab ich folgendes Problem:

Ich hab ein Bild als JLabel und darauch ist ein JSrollPane mit einem JTextArea. Außerdem ist ein Button dabei.

Soweit läuft alles, nur kann ich die TextArea nicht sofort bei Start sehen...ich hatte das Problem schonmal mit meinen Buttons. Da habe ich lediglich folgendes geändert:

Code:
jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtSuchen(), 0);
			jContentPane.add(getJScroll(), 0);

			jContentPane.add(lbBild, null);
			jContentPane.add(lbExit, 0);

Statt "null" schreib ich lediglich "0" , um mein Button sofort anzuzeigen.

Ich hab das gleiche auch mit meinem JScrollPane gemacht, nur da funktioniert es nicht.

(Jaa ich weiß, ich könnte mein Hintergrund auch zeichnen, statt ein JLabel, aber ich würde es zunächst gerne so lassen^^)

mfg

merTii
 
Achja der Teil mit meiner TextArea sieht wie folgt aus:
Code:
private JScrollPane getJScroll() {
		if (jScroll == null) {
			jScroll = new JScrollPane();
			jScroll.setBounds(new Rectangle(7, 179, 647, 169));
			jScroll.setViewportView(getTaAusgabe());
		}
		return jScroll;
	}

und

Code:
private JTextArea getTaAusgabe() {
		if (taAusgabe == null) {
			taAusgabe = new JTextArea();
			
			
		}
		return taAusgabe;
	}
 
Hallo Freunde der Natur,

und zwar hab ich folgendes Problem:

Ich hab ein Bild als JLabel und darauch ist ein JSrollPane mit einem JTextArea. Außerdem ist ein Button dabei.

Soweit läuft alles, nur kann ich die TextArea nicht sofort bei Start sehen...ich hatte das Problem schonmal mit meinen Buttons. Da habe ich lediglich folgendes geändert:

Code:
jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtSuchen(), 0);
			jContentPane.add(getJScroll(), 0);

			jContentPane.add(lbBild, null);
			jContentPane.add(lbExit, 0);

Statt "null" schreib ich lediglich "0" , um mein Button sofort anzuzeigen.

Ich hab das gleiche auch mit meinem JScrollPane gemacht, nur da funktioniert es nicht.

(Jaa ich weiß, ich könnte mein Hintergrund auch zeichnen, statt ein JLabel, aber ich würde es zunächst gerne so lassen^^)

mfg

merTii

mach dir erst mal bewusst was du da anstellst!

bzw was die Methode add(component, index) und add(component, object) überhaupt macht!

du setzt drei Grafik Komponenten an die selbe Position eines Grafik Containers, wobei wir hier nicht von Grafik Position sondern von listen Position sprechen, was bedeutet das du das vorige Objekt überschreibst!

Entweder du setzt die reihen folge selber richtig also


Code:
jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtSuchen(), 0);
			jContentPane.add(getJScroll(), 1);

			jContentPane.add(lbBild, null);
			jContentPane.add(lbExit, 2);
wobei jContentPane.add(lbBild, null); mir nicht sehr geheuer ist
oder

Code:
jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtSuchen(), -1);
			jContentPane.add(getJScroll(), -1);

			jContentPane.add(lbBild, null);
			jContentPane.add(lbExit, -1);
oder (und das solltest du eher machen)

Code:
jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtSuchen());
			jContentPane.add(getJScroll());

			jContentPane.add(lbBild);
			jContentPane.add(lbExit);
 
also nur damit ichs verstanden hab : du willst also mehrere komponenten an der selben stelle übereinander darstellen ?=! ... ich versteh nicht was du genau willst

so wie ich es jetzt verstanden habe willst du also die swing-components über einem bild darstellen ...
dann mach das ganze mit nem JLayeredPane ... zwei JPanel's ... und einige kniffen
zunächst solltest du wissen wie groß das JLayeredPane in seinem Container wird ... lässt sich mit der getSize() methode rausfinden
dann setz du die bounds der beiden JPanels auf diese werte *wobei die ersten beiden parameter 0, 0 sein sollten damit diese relativ zum JLayeredPane auch an dessen 0, 0 koordinaten liegen*
setBounds() kennt auch eine überlagerte variante zu setBounds(Rectangle) ... nämlich die für faule der man die rekt die vier int werte übergibt : setBounds(int, int, int, int) ...
vom "unteren" JPanel überschreibst du die paint methode wie folgt
Java:
JPanel down=new JPanel()
{
	@Override
	public void paint(Graphics g)
	{
		g.drawImage(Image, 0, 0, getSize().width, getSize().height, this);
		super.paintComponents(g);
	}
}
und addest es in das JLayeredPane als unteres panel mit
Java:
JLayeredPane.add(down, new Integer(1));
dann erzeugst du ein ganz gewönliches JPanel als oberes ... wendest darauf setOpaque(false) an und addest es als oberes mit
Java:
JLayeredPane.add(up, new Integer(2));
nun addest du noch auf das obere deine components und fertig ...
hab ich erst vor zwei tagen selbst im netz gefunden ...


wenn das hier alles käse is was ich erzähle weil du es so nich willst dann vergiss das hier einfach ^^
 
Ich arbeite mit Eclipse und die Befehle werden automatisch geschrieben.
Wenn ich in meiner TextArea zu viele Daten ausgebe, dann brauch ich eben einen ScrollPane.
Aus diesem Grund ist meine TextArea auf dem ScrollPane.

Jetzt funktioniert es bei mir auch, wenn ich wie folgt vorgehe:

Code:
jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getBtSuchen(),0);
			jContentPane.add(lbBild,0);
			jContentPane.add(lbExit,0);
			jContentPane.add(lbZurück,0);
			jContentPane.add(getJScrollPane(),0);
 
Was heisst die Befehle werden automatisch geschrieben? Du meinst die vorschlage der Methoden wenn du '.add' schreibst? Da is nix automatisch, da gibt er dir doch auch mehrere Vorschlaege. Oo
 
Die Befehle mit .add sind alle automatisch erschienen...und zwar sahen sie zu beginn so aus:

Code:
jContentPane.add(lbBild, null);

die "null" habe ich dann durch "0" ersetzt.
 
Ja, Eclipse zeigt dir alle verfuegbaren Methoden wenn du nen Punkt setzt ^^, das ist nicht wirklich automatisch, weil die Richtige methode musst du dennoch raussuchen und eventuell auch schauen was genau diese macht.
Da muesste aber auch das .add(Component) zur Verfuegung sein :)
 

Neue Beiträge

Zurück