Anzeige

Java-Frame mit Hintergrundbild und Button


#1
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
 
#3
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));

   }
}
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#4
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
 
#5
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
 
#7
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
 

Bratkartoffel

gebratene Kartoffel
Premium-User
#10
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
 
Anzeige
Anzeige