Co trzeba zrobić,żeby ustawić obrazek jako tło?
Proszę o wyrozumiałość,jestem początkująca.
Nieco paradoksalnie, tło w postaci obrazka dodajesz na końcu.
JLabel bg=new JLabel(new ImageIcon(nazwaObrazka));
bg.setOpaque(true);
add(bg);
To nie o to mi chodziło.Coś takiego tworzy jLabel i ustawia Icon, Mi chadziło o to :żeby było po prostu tło na którym da się układać jButton, JTextField itp.
Ciągle proszę o wyjaśnienie mojego problemu :(
Wypróbowałaś? To się właśnie tak robi. Może Cię zmyliło ImageIcon? Plik graficzny, którego nazwę przekazujesz do ImageIcon może być dowolnej wielkości.
import javax.swing.*;
import java.awt.*;
public class Tlo extends JFrame
{
public static void main(String[] args)
{
new Tlo();
}
//------------------------
public Tlo()
{
setLayout(null);
setPreferredSize(new Dimension(750,406));
JButton b=new JButton("Abrakadabra");
b.setBounds(10,10,120,25);
add(b);
b=new JButton("Hokus-pokus");
b.setBounds(10,110,120,25);
add(b);
JTextField tf=new JTextField(10);
tf.setBounds(10,210,120,25);
add(tf);
JLabel bg=new JLabel(new ImageIcon("jakiś obrazek o rozmiarach 750 na 406"));
bg.setOpaque(true);
bg.setBounds(0,0,750,406);
add(bg);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
}
ewentualnie nadpisać metodę paint(Graphics g):
public void paint(Graphics g){
Graphics2D g2d=(Graphics2D)g; //rzutowanie do Graphics2D, daje możliwość skalowania
float s=(float)(getWidth())/(float)(bg.getWidth(this)); //skaluj by wypełnić na szerokość
g2d.scale(s,s); //skaluj do szerokości
g2d.drawImage(bg, null, this); //rysuj tło
paintComponents(g); //rysuj komponenty
}
Możesz też pominąć skalowanie:
public void paint(Graphics g){
g.drawImage(bg, null, this); //rysuj tło
paintComponents(g); //rysuj komponenty
}
Albo pobawić się z tillowaniem:
public void paint(Graphics g){
for(int x=0; x<getWidth(); x+=bg.getWidth(this))
for(int y=0; y<getHeight(); y+=bg.getHeight(this))
g.drawImage(bg, x, y, this); //rysuj tło
paintComponents(g); //rysuj komponenty
}
Albo tak jak wyżej: labelem, tylko stosując LayeredPane. Ale nadpisanie painta chyba najlepsze
Należy nadpisywać metodę paintComponent, nie paint.
W przeciwnym wypadku rysowanie będzie się odbywać w złym wątku.
paintComponent zawsze powinien na początku wywołać super.paintComponent(g);
protected void paintComponent(Graphics g) {
super.paintComponent(g);
/* reszta */
}
Niestety wy mi nie pomogliście, ale problem rozwiązałam z forum//www.java-tips.org/java-se-tips/javax.swing/wrap-a-swing-jcomponent-in-a-background-image.html