Buttons über Bilder?

  • Themenstarter Themenstarter sneaker27
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

sneaker27

Gast
Hallo,


habe ein problem...

hab mir ein formular erstellt...
mit einem bild....
und will über das bild labels, buttons oder textfelder erstellen...

wenn ich das so angeb...
un zuerst das bild lade, bringt er die buttons nicht in ide richtige position
wenn ich das bild am ende erst lade, holt er die felder rein
aber das bild nicht...


somit mein problem,

wie bekomm ich ein bild in ein formular, auf dem ich buttons ect. positionieren kann


das bild als hintergrundbild machen?!? und dann die objekte darauf erstellen? und das formular fixieren?!?
brauch dringend hilfe :-/
 
Code:
	public static void main(String[] args) {

		JPanel pane = new JPanel() {
			
			public void paintComponent(Graphics g) {
				super.paintComponent(g);
				g.setColor(Color.red);
				g.fillRect(10, 10, 40, 40);
			}
		};
		JFrame frame = new JFrame();
		frame.add(pane);
		pane.add(new JButton("button"));
		frame.setVisible(true);
	}
 
mhmm
aber du hast jetzt nur einem gewissen bereich eine farbe zugeteilt,
ich möchte jedoch auf meiner bilddatei ( *.jpg)
einen button haben...


zur zeit bekomme ich jedoch:
1 NUR den button
2 NUR das bild
3 BEIDES, jedoch die buttons nicht AUF dem bild

:-/
 
das ding is doch....

du hast die grösse des bildes festgelegt
un den button nicht innerhalb des bildes positioniert
ich möchte jedoch die position des buttons IM BILD HABEN
und das ist bei dir auch nicht der fall, darum geht es mir
 
Na freilich ist das bei mir der Fall ... dann verwend halt n anderen Layoutmanager dann kannste den Button besser positionieren ...
 
Bau am Besten mal ein KSKB (kleines selbstkompilierendes Beispiel) und poste es hier. Ich besser es dir dann aus 😉 .
 
import java.awt.*;
import java.io.*;
import java.net.*;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.JFrame;



public class dsa
{

public JLabel Textfeld;
public JFrame f;
private JLabel Land1;


public dsa()
{
initializeComponent();
}

public void initializeComponent(){

JFrame f = new JFrame();
f.setContentPane(new BackgroundPanel());
f.setSize(1030,740);
f.setLocation(1,1);
f.setResizable(false);
f.setVisible(true);


Textfeld = new JLabel();
addComponent(f, Textfeld, 33,92,169,18);
Textfeld.setText("blablupp");
Textfeld.setVisible(true);
Textfeld.setLocation(1, 1);
Textfeld.setVisible(true);
Textfeld.setSize(300, 300);


Land1 = new JLabel();
Land1.setText("Tedrassil");

addComponent(f, Land1, 100,100,169,18);
}


private void addComponent(Container container,Component c,int x,int y,int width,int height)
{
c.setBounds(x,y,width,height);
container.add(c);
}


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

}






class BackgroundPanel extends JPanel
{
Image image;

public BackgroundPanel()
{
loadImage();
}


public void paintComponent(Graphics g)
{
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
int x = (width - imageWidth)/2;
int y = (height - imageHeight)/2;
g.drawImage(image, x, y, this);
}


private void loadImage()
{
String fileName = "image/Welt.jpg";
try
{
URL url = getClass().getResource(fileName);
image = ImageIO.read(url);
}
catch(MalformedURLException mue)
{
System.out.println(mue.getMessage());
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
}

}
 
Pack das Bild auf ein JPanel, und adde das in deine ContentArea von deinem JFrame.

Dann bauste die ein zweites JPanel, machst das opaque(true/false, weiss ich jetzt nicht genau) damit es durchsichtig ist, und arbeitest zum Buttons und was du noch auf deinem Formular haben willst mit dem zweiten JPanel weiter. das addest du dann auch auf deine ContentPane (z-order beachten, sonst siehste nix von deinem Formular 🙂 )

fertisch :lol:
 
Funktioniert ohne Probleme, aber wenn du schon die exakte Position deiner Componenten setzen willst, solltest du dem entsprechenden Container auch vorher das Null-Layout zuweisen. also einfach nach

Code:
JFrame f = new JFrame()

noch ein

Code:
f.setLayout(null);

einfügen. BTW ist generell von der Verwendung des Null-Layouts abzuraten!!!
 
oh wei oh wei....
das is abba n act

aber danke,
bei weiteren probs poste ich nochmal ;D
 
Wieso errinnert mich das an das schwarze Auge? 😀

Du addest alles direkt in dein JFrame (wenn ich deinen code, den man übrigens in Code-Tags packen sollte, richtig deute). geht auch, klar, jedoch würd ich dann an deiner stelle nur den Background direkt in das JFrame packen und die Textfelder/Labels auf dein BackgroundPanel. oder Zwei panels für Background und Foreground machen.

Sonst haste alles im ContentPane des JFrame rumfliegen und musst das mit Z_order immer anordnen das auch alles zu sehen ist was man sehen soll.
 
Ja, ok, Hobbit, das das geht bestreite ich nicht (wär ich ja auch schön doof), nur ich mag halt nicht gern einen Topf in dem alles drin rumschwimmt was ich so brauche, ich schichte mir das gern. Ist aber wohl Geschmackssache und wohl auch davon abhängig was er noch so alles machen will (z.b. wechselnde Hintergründe) dann ists schon praktisch wenn man ein Layer hat nur für den Background und ein Layer für Bedienelemente.

Warum ist generell vom Null-Layout abzuraten? grad für mein 2D-Spielchen hab ich das nullen müssen, weil ich sonst nicht hinbekommen hab was ich wollte. Hat das noch nen tieferen Sinn?
 
Ich geh halt davon aus, dass das was er und gezeigt hat nur ein KSKB ist und nichts bzw. nur wenig mit dem eigenltichen Programm zu tun hat, nachdem ich ihn ja auch dazu aufgefordert habe ein KSKB zu erstellen. Hat ja letztendlich nur ein setLayout(null) gefehlt, dass er in seiner richtigen applikation nur noch einsetzen muss 😉 .

Schon 10000mal erklärt, aber für dich nocheinmal 😉 : Ein durch Verwendung eines Null-Layouts kann es je nach Betriebssystem (sogar schon bei unterschiedlichen Windows-Systemen) zu Verzerrungen der GUI kommen, was ja dann nicht mehr ganz so schön ist ... Natürlich gibt es aber auch fälle, wo man um ein Null-Layout nicht herumkommt. Aber da es ja mittlerweile sehr gute LayoutManager (TableLayout FormLayout) gibt, ist es selten, dass man ein Null-Layout wirklich anwenden muss.
 
brauchst eigenltich nur auf www.jgoodies.com . Mit dem Layoutmanager kannste so ziemlich alles machen. Und dann noch das LaF von der Webisite einbinden und du hast ne wunderschöne Applikation 🙂
 
Guten Morgen,

ich schau montag morgen hier rein,
seh das, les den Beitrag vom Hobbit,
und innerhalb ner halben Minute sind meine Sorgen vergangen.
Hobbit du bist mein Gott ^^
thx
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben