Rysowanie na JPanelu

0

Witajcie, mam dość dziwny problem z którym nie mogę sobie poradzić.
Mam w JFrame JPanel, na którym rysuję obrazki z wykorzystaniem tekstury.
W tym panelu mam inny JPanel, w którym trzymam przyciski (JButton).
Problem w tym, że ten JPanel, na którym rysuję obrazki, a który miał docelowo służyć jako tło tak jakby rysuje po przyciskach zupełnie je przysłaniając. (Gdy najadę myszką, to button się pojawia).

Jak sobie z tym poradzić?

Przykładowy kod, który ilustruje problem (po uruchomieniu poczekajcie chwilkę, po ładuje obrazek z URL):

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable() {  
            @Override  
            public void run() {  
            	Ramka r1 = new Ramka();
            }  
        }); 
		
		
	}
}

class Ramka extends JFrame
{
	public Ramka()
	{
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(100, 100, 500, 500);
		this.setVisible(true);
		this.add(new JBg());
	}
}

class JBg extends JPanel
{
	Image background;
	URL imageURL;
	
	public JBg()
	{
		this.setBackground(Color.RED);
		this.setLayout(new BorderLayout());
		
		JPanel j1 = new JPanel();
		j1.setPreferredSize(new Dimension(100, 100));
		
		this.add(j1, BorderLayout.NORTH);
		
		j1.add(new JButton("Aaaa"));
		j1.add(new JButton("Aaaa"));
		j1.add(new JButton("Aaaa"));
		j1.add(new JButton("Aaaa"));
		
		try {
			imageURL = new URL("https://www.google.pl/images/srpr/logo3w.png");
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
		try {
			background = ImageIO.read(imageURL);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		j1.repaint();
		this.repaint();
		j1.revalidate();
	}
	
	public void paint(Graphics g)
	{
		for(int i = 0; i <= this.getWidth(); i += background.getWidth(null))
			for(int j = 0; j <= this.getHeight(); j += background.getHeight(null))
				g.drawImage(background, i, j, background.getWidth(null), background.getHeight(null), null);
	}
}
1

Przeładowałeś paint() i nie widzę żebyś odrysowywał w nim te buttony...

0

może rysujesz

przycisk a potem backgound.

0

dzięki, nie wiedziałem o tym, że komponenty w panelu, takie jak buttony również należy odświeżyć

0

To zależy od tego którą z metod rysujących przesłonisz. Gdybyś przesłonił paintComponent() to nie musiał byś odrysowywać nic więcej

1 użytkowników online, w tym zalogowanych: 0, gości: 1