Niewidoczne przyciski java JButton

0

Witam! Pisze prostą aplikacje i chce wyświetlić w niej 2 przyciski jeden wyświetla się od razu drugi niestety staje się widoczny dopiero po najechaniu na niego nie wiem czemu tak się dzieje mógłby ktoś pomóc?

 package Ogame;

import javax.swing.JButton;
import javax.swing.JFrame;



import java.awt.Color;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Ogame extends JFrame {
	
	
	Image img,img1,imgkrysztal,imgmetal,imgdeuter,metall,kristall,deuterium;
	private JButton budkry;
	private JButton budmet;
	
	ActionListener al = new ActionListener(){
		public void actionPerformed(ActionEvent e){
			
		}
	};
	
	public Ogame(){
		
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		
		
		img =loadImage("kop.jpg");
		img1 =loadImage("background.jpg");
		imgkrysztal = loadImage("krysztal.jpg");
		imgmetal = loadImage("metal.jpg");
		imgdeuter = loadImage("deuter.jpg");
		metall = loadImage("metall.gif");
		kristall = loadImage("kristall.gif");
		deuterium = loadImage("deuterium.gif");
		
		budkry = new JButton("Buduj");
		budkry.setBounds(600, 280, 100, 20);
		budkry.addActionListener(al);
		
		budmet = new JButton("Buduj");
		budmet.setBounds(800,200,100,20);
		budmet.addActionListener(al);
		add(budmet);
		
		
		
		
		add(budkry);
		
		setBounds(0, 0, Stage.SZEROKOSC , Stage.WYSOKOSC);
		setVisible(true);
		
		
	}
	public BufferedImage loadImage(String sciezka) {
		URL url=null;
		try {
		url = getClass().getClassLoader().getResource(sciezka);
		return ImageIO.read(url);
		} catch (Exception e) {
		System.out.println("error 0001");
		System.exit(0);
		return null;
		}
		}
	
	
	public void paint(Graphics gDC){
		
		gDC.drawImage(img1, 1, 1, this);
		
		gDC.drawImage(imgkrysztal, 300, 270,this);
	
		
		gDC.drawImage(imgmetal, 300, 150, this);
		gDC.drawImage(imgdeuter, 300, 390, this);
		gDC.drawImage(metall, 350, 40, this);
		gDC.drawImage(kristall, 550, 40,this);
		gDC.drawImage(deuterium, 750, 40, this);
		gDC.setColor(Color.WHITE);
		
		gDC.drawString("1", 365, 75);
		gDC.drawString("1", 565, 75);
		gDC.drawString("1", 765, 75);
		}
	
	
	
public static void main(String[] args){
	
	 new Ogame();
	
}
}
0

Odpaliłem ten kod. O dziwo - oba przyciski wyświetlają się jednocześnie wraz z pojawieniem się okna. Oczywiście usunąłem u siebie kod odpowiedzialny za ładowanie obrazków (żeby nie rzucał wyjątkiem). Więc nie wiem gdzie leży problem. Spróbuj to odpalić na innej maszynie. Byc może z Twoja maszyną jest coś nie tak.

0

Problem jest właśnie gdzieś z ładowaniem obrazków też sobie teraz usunąłem kod do ładowania obrazków i się wszystko wyświetliło. Te obrazki jakoś przysłaniają mi ten przycisk, tylko nie wiem czemu.

0

Hmm, a więc widzisz... Problem leży po stronie obrazków. Sprawdź dobrze rozmiary tych obrazków. Wysosce prawdopodobne, że jeden z nich jest zbyt wielki i najzwyczajniej przysłania jeden z przycisków.
Pomijając obrazki - kod wygląda ok.

0

Tutaj chodzi o metodę paint. wystarczy że ją zaimplementuje nawet pustą i już tego przycisku nie ma na ekranie.

0

W takim razie spróbuj tak. Po wywołaniu Twojej metody paint, wywołaj metodę: paintComponents()
Powinno zadziałać :)

0

Niestety nie pomaga ;-(

1

Łączenie rysowania (metody draw... w paint) i umieszczania komponentów na jednym panelu to kiepski pomysł. Umieść w oknie dwa panele (JPanel) na jednym rysuj, a na drugim umieść przyciski.
Przykładowy konstruktor:

    public Figury()
    {
        super("Różne figury");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout(2,2));
        add(new PanelFigur(),BorderLayout.CENTER);

        JPanel panel = new JPanel();

        JButton b = new JButton("Prostokąt");
        panel.add(b);

        b = new JButton("Elipsa");
        panel.add(b);
        
        b = new JButton("Obie figury");
        panel.add(b);

        b = new JButton("Pustka");
        panel.add(b);

        add(panel,BorderLayout.SOUTH);

        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
...
    //------------------------
    class PanelFigur extends JPanel
    {
        public PanelFigur()
        {
            setBackground(Color.WHITE);
            setPreferredSize(new Dimension(400,300));
        }
        //-------------------
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            //tutaj rysowanie

        }
    }
1
        budkry = new JButton("Buduj");
        budkry.setBounds(600, 280, 100, 20);
        budkry.addActionListener(al);
        
        budmet = new JButton("Buduj2");
        budmet.setBounds(800,200,100,20);
        budmet.addActionListener(al);
        add(budmet);
        add(budkry);
        
        setBounds(0, 0, 1000 , 600);
        setVisible(true);
       
        paint(getGraphics()); // Twoja własna metoda
        
        paintComponents(getGraphics());

U mnie to działa. Chociaz zaznaczam, że odradza się uzywania metody getGraphics() i nie powinno się tego robić.

0

Dziękuję za pomoc zrobiłem dwa panele i teraz życie stało się łatwiejsze wielkie dzięki!

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