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);
}
}