Button op gui wil niet.

Status
Niet open voor verdere reacties.

mastermindzh

Verenigingslid
Lid geworden
10 dec 2008
Berichten
4.993
Wat ik wil is simpel.

Een jframe met een achtergrondje, en daar wat leuke buttons op :)


Ik heb nu deze code:

[JS]package spaceinvaders;

import javax.swing.*;

import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.io.*;
import javax.imageio.*;

public class MainMenu {

/**
* @param args
*/
public void run() {
// create jframe
JFrame f = new JFrame("Space Invaders ~ Main Menu");
// load an image
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
InputStream input = classLoader
.getResourceAsStream("images/background.png");

try {
f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(input))));
} catch (IOException e) {
System.out.println("Background image can't be found");
}

// set jframe properties

f.setResizable(false);
f.setSize(800, 600);
f.pack();

// center the frame
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
f.setLocation(dim.width / 2 - f.getSize().width / 2,
dim.height / 2 - f.getSize().height / 2);

// button
JButton button = new JButton();
try {
Image img = ImageIO.read(getClass().getResource(
"/images/gamebackground.png"));
button.setIcon(new ImageIcon(img));
} catch (IOException ex) {
}
button.setPreferredSize(new Dimension(250, 250));
f.add(button);

f.setVisible(true);
}

public MainMenu() {
run();
}

}
[/JS]

Als ik dit uitvoer komt het scherm prima voor de dag (met achtergrond), maar de button is nergens te vinden.

Kan iemand mij uitleggen wat er verkeerd gaat?
 
Een paar opmerkingen

- Je gebruikt f.pack() en f.setSize() , als je een grootte van de JFrame zelf wilt instellen gebruik je setSize(breedte, hoogte) , als je het automatisch wilt laten berekenen gebruik je pack(). Gebruik dus niet beiden.
- Een JFrame werkt met layouts, elke layout heeft een andere manier van items toevoegen aan een GUI. Nu gebruik je de standaard layout 'BorderedLayout', het is beter om een andere layout te gebruiken omdat je een bepaalde grootte voor je button wilt hebben.

Het simpelste voor jou is waarschijnlijk om een null layout te gebruiken.
Nadat je JFrame hebt gemaakt kan je de null layout zo instellen:
Code:
f.setLayout(null);

Om een button toe te voegen op een bepaalde plaats met een bepaalde hoogte gebruik deze code

Code:
button.setBounds(positieX, positieY, breedte, hoogte);
f.add(button);

Hopelijk kan je hier wat mee.
 
Laatst bewerkt:
f.pack was om even te testen :P

Heb het uiteindelijk idd werkend gekregen.


Ik weet niet waarom ik vergeten was een layout toe te voegen.

Heb het uiteindlijk met een boxedlayout gedaan.
Stap wss toch over op een flow layout. maar dat is puur design:P

Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan