Zmiana tła w JFrame.

0

W okienku jest panel z narysowanym tlem (jpg) i JTextField. Muszę zmienić tło i tylko tło. Jak mi się uda podmienić to JTextField znika, tzn. jest caly czas ale go nie widac, dopiero jak sie cos tam wpisze to sie pojawia. Jak to zrobic. Probowalem zmieniac rysunek w samym panelu, zmieniac panel, txtfielda dodawac w roznych miejscach ale najwiecej co osiagnalem to tak jak opisalem. Jak to zrobic? Z góry dzięki.

0

Napisz jeszcze w jaki sposób rysowane jest tło.

0

W klasie z panelem:

    public void paint(Graphics g) {

            try {
                Image img = ImageIO.read(new File("gfx/sprzedawca-1.jpg"));
                g.drawImage(img, 0, 0, null);
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }

1
  1. Pomysł by w metodzie paint(..) tworzyć obrazek jest nierozsądny, metoda ta jest wywoływana przy każdej konieczności odrysowania: użytkownik wyciągnął okno na wierzch, przesunął okno, zmienił rozmiar.... Obiekt typu Image winien być tworzony raz w konstruktorze, ewentualnie podmieniany.
  2. Jeżeli chcesz używek obrazka jako tła, to lepiej to zrobić przez wstawienie JLabel. Poniżej program, w którym tło jest w etykiecie i jest może być zmienione przez użytkownika.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Tlo extends JFrame implements ActionListener
{
    private JLabel bg;
    private boolean first=true;
    //------------------------
    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);
        b.addActionListener(this);
        add(b);

        JTextField tf=new JTextField(10);
        tf.setBounds(10,210,120,25);
        add(tf);

        bg=new JLabel(new ImageIcon("images/ayers.jpeg"));
        bg.setOpaque(true);
        bg.setBounds(0,0,750,406);
        add(bg);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
    //------------------------
    public void actionPerformed(ActionEvent ae)
    {
        remove(bg);
        if(first)
        {
            bg=new JLabel(new ImageIcon("images/ayers2.jpeg"));
            bg.setOpaque(true);
            bg.setBounds(0,0,750,406);
        }
        else
        {
            bg=new JLabel(new ImageIcon("images/ayers.jpeg"));
            bg.setOpaque(true);
            bg.setBounds(0,0,750,406);
        }
        add(bg);
        first=!first;
        repaint();
    }
}
0

Czyli chcesz aby w jTextField było tło jako obrazek jpg i wiadomości wyświetlane były na tym tle tak?

0

Działa! Wielkie dzięki. Chodziło o kolejność dodawania komponentów i metodę setOpaque(). Z tym paintem to wiem, probowalem tylko co mi zadziala i jak więc pisałem byle jak. Masz u mnie browar, da się go jakoś mailem wysłać?

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