Java-Frame mit Hintergrundbild und Button

ekisback67

Grünschnabel
Hey :)

ich bin neu im Forum und in der Java-Programmierung und auf ein Problem gestoßen, wobei ich hoffe, dass ihr mir weiterhelfen könnt.

Und zwar möchte ich meinem JFrame ein Hintergrundbild verpassen, auf diesem dann ein Button platzfinden soll.

Mit ein wenig Hilfe habe ich das sogar schon geschafft, nur habe ich das Problem, dass ich zwar die Größe des Buttons ändern kann, aber nicht dessen Position...

Außerdem lässt dich die Größe des Buttons nur mit dem Befehl setPreferredSize(new Dimension(x,y))) ändern, nicht aber mit setSize().

Habt ihr eine Idee wieso? :/

Mein Code:

Java:
public class Gui extends JFrame
{   
    
    private BedienPanelOben bedienPanelOben;
    
    private Image hBild;
    
    private JButton powerButt = new JButton();

    public static void main()
    {
        Gui myGui = new Gui();
    }

    public Gui()
    {
        super("Programm");
        
        setLayout(null);
        
        initialisieren();
        
        bedienPanelOben = new BedienPanelOben();

        bedienPanelOben.powerButt.setPreferredSize(new Dimension(35,25));       
        //bedienPanelOben.powerButt.setSize(50,50);
        bedienPanelOben.powerButt.setLocation(50,50);
        
        add(bedienPanelOben.powerButt);

        setBounds(500,300,1040,490);
        
        setVisible(true);
        
    }
    
    private void initialisieren()
    {
        setContentPane(new JPanel()
        {
            {
                hBild = getToolkit().createImage("bild.jpg");
                MediaTracker mt = new MediaTracker(this);
                mt.addImage(hBild, 1);
                try
                {
                    mt.waitForAll();
                }
                catch(InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            
            @Override
            protected void paintComponent(Graphics g)
            {
                g.drawImage(hBild, 0, 0, this);
            }
        });
    }
}

Grüße
 
Hey :)

BedienPanelOben ist eine Klasse, in der ich alle meine Buttons implementieren wollte:

Java:
public class BedienPanelOben extends JPanel
{
   public JButton powerButt = new JButton();
  
   public BedienPanelOben()
   {
      //powerButt.setBounds(540,50,350,250);
      
      powerButt.setBackground(Color.RED);
      //powerButt.setPreferredSize(new Dimension(35,25));

   }
}
 
Hi,

dass du mit setPreferredSize() und nicht mit setSize() arbeiten musst ist eine der etwas komisch anmutenden Eigenschaften von Swing.
Wenn du neu in Java bist, dann verwende bitte gleich JavaFX. Swing ist tot, JavaFX ist der Nachfolger. Ist auch einfacher zu verwenden (du kannst z.b. die Oberflächen auch per Designer erstellen: https://gluonhq.com/products/scene-builder/)

Zu Swing: Panels sind standardmässig transparent, sprich ein setBackground() zeigt keine Wirkung. Du musst es erst per setOpaque(false) undurchsichtig machen.

Grüsse,
BK
 
Hi Bratkartoffel,

vielen Dank für den Hinweis. Ich werde mich mit JavaFX mal auseinandersetzen.

Aber kannst du mir sagen, warum ich die Position meines Buttons nicht verändern kann, dessen Größe aber schon?

Grüße
 
Hey,

danke für Deine schnelle Antwort. :)

in meinem Code habe ich den LayoutManager mit

Code:
setLayout(null);

deaktiviert, oder nicht? Deswegen wundere ich mich, das ich setPreferredSize verwenden muss und nicht setSize..


Grüße
 
Vielen Dank :)

Jetzt habe ich aber noch das Problem, warum ich die Position des Buttons nicht verändern kann.

Hast du da auch eine Idee?


Grüße
 
Hi,

Ich vermute, dass du dein Panel per setLocation() platzieren musst, nicht den Button innerhalb des Panels. Das Panel selbst ist meines Wissens nach nur so gross, wie die Komponenten innerhalb.
Da dein Panel also nur so gross wie der Button ist, ignoriert er die Location von diesem.

Grüsse,
BK
 
Zurück