JPanel mit Hintergrundbild, setOpaque

iChaos

Aktives Mitglied
Hi zusammen


Ich weiss nicht mehr weiter. Ich habe ein JFrame, mit nem JPanel. Wie kann ich ein Hintergrundbild auf das Frame/Panel hinzufügen? Versucht habe ich bis jetzt die paint()-Methode, jedoch passierte da nix...

Desweiteren habe ich noch eine Frage; Letztens hat man mir gezeigt, wie irgendwie mit setOpaque(%Zahl) das Frame je nach Prozentzahl durchsichtig machen kann. Es war natürlich nicht setOpaque, jedoch ziemlich ähnlich. Habe nach langem googlen keine Resultate gefunden. Wer weiss
wie es funktioniert?

Wäre froh wenn ihr mir helfen könntet!

Gruss
 
Servus,

mit
Java:
setOpaque(false);
kannst du das Fenster durchsichtig machen.



Ein Hintergrundbild kannst du in etwa so einfügen:

Java:
public static void main(String[] args) {
      new Main("h1.jpg").setVisible(true);
}

public Main(String filename) {
  bi = ImageIO.read(new File(filename));
}

Natürlich ist bi ein BufferedImage:
Java:
private BufferedImage bi;

So "zeichnest" du das Bild dann in dein Fenster:
Java:
public void paint(Graphics g) {
    g.drawImage(bi, 0, 0, getWidth(), getHeight(), this);
  }

Ich hoffe ich konnte dir helfen.
 
Zu dem Teil mit den durchsichtigen Fenstern, du meintest sicherlich AWTUtilities ?
Wirf mal einen Blick hier rein

(und nochn kleines p.s.: bei JPanel besser paintComponent überschreiben *g*)
 
doch nicht ganz Y.y

Das Problem ist nun, dass es mir das Bild zwar zeichnet, jedoch über anderen Gui-Komponenten drüber. Dabei wird das Bild zuerst gesetzt!
Wer kann mir da weiterhelfen?
 
Ich hatte das mal mit einer zusätzlichen Klasse gelöst. Funktioniert 100% ist aber evtl. nicht die beste Lösung^^ Kann selbstverständlich mit Getter und Setter erweitert werden, sodass sich der Hintergrund ändert, aber mein Anliegen war es damals einen statischen Hintergrund zu schaffen.

JPanel panel = BackgroundJPanel(background);

Java:
    public class BackgroundJPanel extends JPanel {
        BufferedImage image;

        public BackgroundJPanel(BufferedImage image) {
            this.image = image;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (this.image != null) {
            g.drawImage(image, 0, 0, this);
            }
        }

       @Override
       public Dimension getPreferredSize() {
           if (icon != null) {
                return new Dimension(image.getWidth(), image.getHeight());
            } else {
                return super.getPreferredSize();
          }
       }
    }
 
Java:
	public GuiElements() throws IOException {

		this.setLayout(new BorderLayout());
		JPanel panelConnect = new JPanel(new FlowLayout(FlowLayout.LEFT));
		labelIP = new JLabel("IP:");
		textFieldIP = new JTextField("localhost");
		labelPort = new JLabel("Port:");
		textFieldPort = new JTextField("666");
		textFieldPort.setFocusable(false);
		bi = ImageIO.read(new File("background.jpg"));

		buttonGroupChoose = new ButtonGroup();
		radioButtonHost = new JRadioButton("Host", true);
		radioButtonClient = new JRadioButton("Client");

		buttonConnect = new JButton("Connect!");

		buttonGroupChoose.add(radioButtonHost);
		buttonGroupChoose.add(radioButtonClient);
		
//		panelConnect.add(labelIP);
//		panelConnect.add(textFieldIP);
//		panelConnect.add(labelPort);
//		panelConnect.add(textFieldPort);
//		panelConnect.add(radioButtonHost);
//		panelConnect.add(radioButtonClient);
//		panelConnect.add(buttonConnect);

		panelChat = new JPanel(new FlowLayout(FlowLayout.LEFT));
		
		
		textAreaChat = new JTextArea(20, 55);
		textAreaChat.addKeyListener(this);
		textAreaChat.setEditable(false);
		JScrollPane scrollPaneChat = new JScrollPane(textAreaChat);
		textFieldNickname = new JTextField("First type Nickname here!!!", 5);
		textFieldNickname.addKeyListener(this);
		textFieldMessage = new JTextField(40);
		buttonSend = new JButton("Senden");
		buttonHide = new JButton("Hide");
		buttonHide.addActionListener(this);
		buttonHide.addKeyListener(this);
		buttonHide.setMnemonic(KeyEvent.VK_0);

		JPanel panelSend = new JPanel(new FlowLayout(FlowLayout.LEFT));
		panelSend.add(textFieldNickname);
		panelSend.add(textFieldMessage);
		panelSend.add(buttonSend);
		panelSend.add(buttonHide);

//		panelChat.add(scrollPaneChat);
//		panelChat.add(panelSend, new GridLayout(1, 3));
//
//		buttonConnect.addActionListener(this);
//		buttonSend.addActionListener(this);
//		textFieldMessage.addActionListener(this);

//		this.add(panelConnect, BorderLayout.NORTH);
//		this.add(panelChat, BorderLayout.CENTER);

	}

	
	public void paintComponent(Graphics g) {
		if(bi!=null){
			System.out.println("here");
		g.drawImage(bi, getWidth(), getHeight(), panelChat);
		}
	}


Hier der Code...
Hab mal probiert indem ich alles auskommentiere, jedoch erscheint ebenfalls kein Bild.
das mitdem Syso funktioniert jedenfalls!
 
gut das mit dem Bild zeichnen hat prima geklappt;

jedoch ist nun mein TextArea im Weg; gibt es einen Weg das TextArea transparent zu machen? mit einem alpha wert setzen klappts nicht... am besten wäre ne methode wie setWindowOpacity() xD

hat jemand Vorschläge`?
---------

läuft; musste scrollpane und textarea auf 0,0,0,0 setzen!
 
Zuletzt bearbeitet:

Zurück
Oben