Obraz w tle przycisków

0

Pracuję nad grą komputerową w Javie. W jaki sposób, korzystając z bibliotek Swing, dodać panel przycisków i tło menu?
Kombinowałem już dość sporo, jednakże za każdym razem pojawiają się ALBO przyciski z szarym tłem standardowym, ALBO mój obrazek w tle, ale bez przycisków.
Nie mogę udostępnić swojego kodu, ponieważ w stanie głębokiej wściekłości z powodu wielogodzinnej pracy bez żadnych wyników (jestem cierpliwy, ale nie aż tak), usunąłem pliki z kodem. Teraz jednak zaczynam pisać od nowa i chciałbym dowiedzieć się już teraz, w jaki sposób to naprawić.

PS: W trakcie pisania tego postu wpadłem na pomysł. Czy przyciski są, ale schowane za obrazkiem? Wtedy, gdybym narysował te przyciski na obrazku, działałoby, ale nie jestem pewien swojej racji.

0

Wpierw umieść przyciski, a potem JLabel z obrazkiem i ustaw etykiecie setOpaque(true). Trzeba wtedy, niestety, zrezygnować z menadżera rozkładu i wykorzystywać metodę setBounds().

0

Zaraz sprawdzę.
EDIT: Nie mam pojęcia, o co chodzi. Kombinowałem, ale się nie da.
Oto kod, jaki przygotowałem:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Start
{
	public static void main(String[] args)
	{
		MenuRamka mr = new MenuRamka();
		mr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mr.show();
	}
}

class MenuRamka extends JFrame
{
	public MenuRamka()
	{
		Toolkit tk = Toolkit.getDefaultToolkit();
		Dimension rozEkr = tk.getScreenSize();
		int szerEkr = rozEkr.width;
		int wysEkr = rozEkr.height;
		
		setSize(szerEkr, wysEkr);
		setLocation(0, 0);
		
		MenuPanel mp = new MenuPanel();
		MenuTlo mt = new MenuTlo();
		Container Menu = getContentPane();
		Menu.add(mt);
		Menu.add(mp);
		
		int rozdEkr = szerEkr / wysEkr;
		if (rozdEkr == 16 / 9)
		{
			rozdEkrWynik = 9;
		}
		else if (rozdEkr == 16 / 10)
		{
			rozdEkrWynik = 10;
		}
		else
		{
			rozdEkrWynik = 4;
		}
	}
	public static int rozdEkrWynik;
}

class MenuTlo extends JLabel
{
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		
		Toolkit tk = Toolkit.getDefaultToolkit();
		
		if (MenuRamka.rozdEkrWynik == 9)
		{
			String MenuTloSciezka = "images/backgrounds/16_9.gif";
			Image MenuTlo = tk.getImage(MenuTloSciezka);
			g.drawImage(MenuTlo, 0, 0, null);
		}
		else if(MenuRamka.rozdEkrWynik == 10)
		{
			String MenuTloSciezka = "images/backgrounds/16_10.gif";
			Image MenuTlo = tk.getImage(MenuTloSciezka);
			g.drawImage(MenuTlo, 0, 0, null);
		}
		else if(MenuRamka.rozdEkrWynik == 4)
		{
			String MenuTloSciezka = "images/backgrounds/4_3.gif";
			Image MenuTlo = tk.getImage(MenuTloSciezka);
			g.drawImage(MenuTlo, 0, 0, null);
		}
	}
}

class MenuPanel extends JPanel
{	
	public MenuPanel()
	{
		JButton test = new JButton("Test");
		add(test);
	}
} 
0

Raczej tak

public class Tlo extends JFrame implements ActionListener
{
    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);

        b=new JButton("Hokus-pokus");
        b.setBounds(10,110,120,25);
        add(b);

        JLabel 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);
    }
    ...
}
0

A dałoby się wytłumaczyć to prościej? Dopiero uczę się Javy i nie mam bladego pojęcia, gdzie to wstawić.

0

Najprościej skorzystać z projektów demonstracyjnych do tutoriala Javy i dokładnie je sobie obejrzeć. Można poszukać od razu SwingSet2 lub SwingSet3 bo w tych demkach są niemal wszystkie możliwości Swinga wykorzystane (te nie wymagające specjalnej wyobraźni czy finezji).

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