Bild als Hintergrund

Sascha1122

Grünschnabel
Hallo,

ich habe folgendes Problem: Ich verwende ein Bild als Hintergrund, aber ich weiß nicht wie ich es auch Hintergrund bekomme. Also Panels und Buttons werden nicht darauf gebracht. Entweder sie sind gar nicht zu sehen oder man muss erst mit der Maus drüber fahren um sie zu sehen.

Ich habe es probiert indem ich den Hintergrund in ein Panel gebe und das darüberliegende Panel auf "durchsichtig " setze mir "setOpalse(false)"

Die andere Möglichkeit ist mit der Paint-methode.

Funktioniert beides nicht so richtig =(

Hat jemand eine Idee?

public class QuizLayout extends JFrame {
Vector v = new Vector();

// Anlegen der GUI Elemente
Container cp = this.getContentPane();
Image img = Toolkit.getDefaultToolkit().getImage("wwm.jpg");
JLabel background = new JLabel( new ImageIcon(img), JLabel.CENTER);
JLabel headline = new JLabel("Das JavaQuiz", JLabel.CENTER);
JLabel question = new JLabel("Hier steht die Frage", JLabel.CENTER);


JPanel ctnpnl = new JPanel();
JPanel anspnl = new JPanel();
ButtonGroup bg = new ButtonGroup();
JRadioButton[] answers = new JRadioButton[4];

JPanel btnpnl = new JPanel();
JButton nextbtn = new JButton("Quiz starten");
JButton backbtn = new JButton("Letzte Frage");
Score score = new Score(this);
Events eventhandling = new Events(this, score);

JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu("Anmelden");
JMenuItem mItem1 = new JMenuItem("Anmelden");

// public void paint(Graphics g) {
// Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();
// Image img = Toolkit.getDefaultToolkit().getImage("wwm.jpg");
// g.drawImage(img,0,0,scr.width,scr.height,this);
// }
public QuizLayout(Vector v_) {
this.v = v_;
this.setTitle(headline.getText());
this.setSize(500,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(300,200);
this.setJMenuBar(mb);

mb.add(menu);
menu.add(mItem1);

headline.setVerticalAlignment(JLabel.CENTER);
// headline.setOpaque(false);
headline.setFont(new Font("Arial", Font.BOLD, 20));

//answerpanel
anspnl.setLayout(new GridLayout(2,2));
// anspnl.setOpaque(false);

for (int k=0;k<4;k++){
answers[k] = new JRadioButton("RadioButton");
anspnl.add(answers[k]);
bg.add(answers[k]);
}
ctnpnl.setLayout(new GridLayout(2,1));
ctnpnl.add(question);
ctnpnl.add(anspnl);
cp.add("North",background);
cp.add("North",headline);
cp.add("Center",ctnpnl);
btnpnl.setLayout(new GridLayout(1,2));
btnpnl.add(backbtn);
btnpnl.add(nextbtn);
cp.add("South",btnpnl);
addListener();
}
 
Erstmal ein paar Dinge:
1. Code Tags wären echt Etwas feines ^^
2. Fehlt einiges um den Code auszuführen o.o
3. Solltest du unbedingt darauf achten, sauberer zu programmieren, das alles sehr durcheinander. :suspekt:
Java:
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Vector;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class QuizLayout extends JFrame 
{
	private static final long serialVersionUID = 1L;
	Vector v;
	Image img;
	JLabel headline,question;
	JPanel ctnpnl,anspnl,btnpnl;
	JRadioButton[] answers;
	JButton nextbtn,backbtn;
	ButtonGroup bg;
	JMenuBar mb;
	JMenu menu;
	JMenuItem mItem1;
	JComponent cp;
	QuizLayout(Vector v)
	{	
		super();
		this.v = v;
		cp = new JComponent()
		{
			private static final long serialVersionUID = 1L;

			public void paint(Graphics g) 
			{
			 	for(int i = 0; i < getWidth(); i+=img.getWidth(null))
			 	{
			 		for(int j = 0; j < getHeight(); j+=img.getHeight(null))
			 		{
			 			g.drawImage(img,i,j,this);
			 		}
			 	}
			 	super.paint(g);
			} 
		};
		img = Toolkit.getDefaultToolkit().getImage("a.png");
		headline = new JLabel("Das JavaQuiz", JLabel.CENTER);
		question = new JLabel("Hier steht die Frage", JLabel.CENTER);
		ctnpnl = new JPanel();
		anspnl = new JPanel();
		btnpnl = new JPanel();
		answers = new JRadioButton[4];
		bg = new ButtonGroup();
		nextbtn = new JButton("Quiz starten");
		nextbtn.setOpaque(false);
		backbtn = new JButton("Letzte Frage");
		backbtn.setOpaque(false);
		mb = new JMenuBar();
		menu = new JMenu("Anmelden");
		mItem1 = new JMenuItem("Anmelden");
		configLayout();
	}
	
	private void configLayout()
	{
		this.setTitle(headline.getText());
		this.setSize(500,500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocation(300,200);
		this.setJMenuBar(mb);		
		this.setContentPane(cp);

		mb.add(menu);
		menu.add(mItem1);
		headline.setVerticalAlignment(JLabel.CENTER);
		headline.setFont(new Font("Arial", Font.BOLD, 20));
		anspnl.setLayout(new GridLayout(2,2));		
		anspnl.setOpaque(false);
		for (int k=0;k<4;k++)
		{
			answers[k] = new JRadioButton("RadioButton");
			answers[k].setOpaque(false);
			anspnl.add(answers[k]);
			bg.add(answers[k]);
		}
		ctnpnl.setLayout(new GridLayout(2,1));
		ctnpnl.add(question);
		ctnpnl.add(anspnl);	
		ctnpnl.setOpaque(false);	
		btnpnl.setLayout(new GridLayout(1,2));
		btnpnl.setOpaque(false);
		btnpnl.add(backbtn);
		btnpnl.add(nextbtn);
		
		cp.setLayout(new BorderLayout());
		cp.add(headline,BorderLayout.NORTH);
		cp.add(ctnpnl,BorderLayout.CENTER);
		cp.add(btnpnl,BorderLayout.SOUTH);
		super.setVisible(true);
	}
}
Hab es mal für mich übersichtlicher gemacht. Ist zwar auch noch recht dreckig der Code, aber egal.^^
Musst es für dich dementsprechend wieder anpassen (Pfad zum Bild + die Klassen, die ich rauswerfen musste, weil ich sie nicht hatte). Hab das Hintergrundbild mal kacheln lassen. Man kann es auber auch über die gesamte Größe zerren, sieht nur Pixelig aus dann find ich.
Was ich gemacht hab: einfach die Paint() Methode der ContentPane überschrieben + super.paint(g); damit auch der Rest gezeichnet wird =)
Mfg hoffe das hilft dir etwas
 
Zuletzt bearbeitet:
Vielen Dank
funktioniert super!

Bin noch blutiger Anfänger, daher auch der unschöne Code und die Unerfahrenheit mit der Darstellung des Quellcode im Forum.
 
Zurück