Swing 1 JButton bedeckt meine ganze Frame aber Warum?

xJan45x

Aktives Mitglied
Hallo Leute,
Ich Programmiere zurzeit ein kleinen Rechner. Aber ich habe ein Problem und zwar habe ich mir 2 JButtons gemacht die die Zahlen 0 und 1 bis jetzt sind. Aber der JButton 2 bedeckt meine ganze Frame. Aber das soll so nicht sein. Kann mir einer sagen was ich da falsch gemacht habe?
[Java]
@SuppressWarnings("serial")
public class RechnerFrame extends JFrame implements ActionListener{

private static final int width = 267;
private static final int height = 320;
private static Dimension size = new Dimension(width, height);
private static JMenuBar bar_information;
private static JMenu menu_extras;
private static JMenuItem item_developer;
private static JMenuItem item_version;
private static JButton knopf_0;
private static JButton knopf_1;

public RechnerFrame() {
initAndLoadCompomenten();
setSize(size);
setMaximumSize(size);
setMaximumSize(size);
setResizable(false);
setTitle("Rechner");
setDefaultCloseOperation(3);
setAutoRequestFocus(false);
setLocationRelativeTo(null);
setVisible(true);
}

private void initAndLoadCompomenten() {
loadMenu();
loadButtons();
}

private void loadButtons() {
knopf_0 = new JButton("0");
knopf_0.setBounds(10, 220, 50, 30);
knopf_0.addActionListener(this);
add(knopf_0); //<-- Dieser wird nur angezeigt wenn ich nicht über denn JButton 1 Scrolle. Er hat auch die richtige Größe.

knopf_1 = new JButton("1");
knopf_1.setBounds(10, 180, 50, 30);
knopf_1.addActionListener(this);
add(knopf_1); //<-- Dieser JButton wird übers ganze Bild angezeigt
}


private void loadMenu() {
bar_information = new JMenuBar();
menu_extras = new JMenu("Extras");
item_developer = new JMenuItem("Entwickler");
item_version = new JMenuItem("Version");
menu_extras.add(item_developer);
menu_extras.add(item_version);
bar_information.add(menu_extras);
item_developer.addActionListener(this);
item_version.addActionListener(this);
setJMenuBar(bar_information);
}

@Override
public void actionPerformed(ActionEvent e) {
}
}

[/code]
Danke schon mal jetzt!
 
Also ein paar Punkte:
  • Man leitet nicht von JFrame ab, außer man verändert das verhalten
  • Man vermeidet tunlichst static Variablen (da es Klassenvariablen sind und nicht Objektvariablen)
  • Dein Problem ist, dass du noch diesen Code brauchst um mit setBounds zu arbeiten:
Java:
 frame.setLayout(null);
  • doch bedenke man SOLL LayoutManager verwenden denn: null-Layouts are evil
  • Man schreibt auch public static final Konstanten GROSS
  • java naming convention sieht für Variablen vor, dass sie so aussehen: camelCase
  • normalerweise werden ActionListener als lokal als anonyme Klassen definiert(oder Lambdaexpressions) -> aber kommt auf den Programmierstil an
  • Achja und in der FAQ gibt es unter den Tutorials ein Tutorial, dass auch einen Taschenrechner programmiert

Doch verwende doch diesen Code:
Java:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class RechnerFrame {

    public static void main(String[] args) {
        new RechnerFrame();
    }

    private static final int WIDTH = 267;
    private static final int HEIGHT = 320;
    private JFrame frame;

    public RechnerFrame() {
        frame = new JFrame("Rechner");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        initAndLoadCompomenten();
        frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
        frame.setVisible(true);
    }

    private void initAndLoadCompomenten() {
        loadMenu();
        loadButtons();
    }

    private void loadButtons() {
        JPanel numberPanel = new JPanel(new GridBagLayout());
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                int number = i * 3 + j + 1;
                JButton numberButton = new JButton(String.valueOf(number));
                numberButton.addActionListener((event) -> System.out
                        .println("Button: " + number));
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridx = j;
                gbc.gridy = i;
                gbc.insets = new Insets(0, 0, 1, 1);

                numberPanel.add(numberButton, gbc);
            }
        }

        frame.add(numberPanel);
    }

    private void loadMenu() {
        JMenuBar information = new JMenuBar();
        JMenu extrasMenu = new JMenu("Extras");
        JMenuItem developerMenuItem = new JMenuItem("Entwickler");
        JMenuItem versionMenuItem = new JMenuItem("Version");
        extrasMenu.add(developerMenuItem);
        extrasMenu.add(versionMenuItem);
        information.add(extrasMenu);
        developerMenuItem.addActionListener((event) -> {
        });
        versionMenuItem.addActionListener((event) -> {
        });
        frame.setJMenuBar(information);
    }
}
 

Neue Themen


Zurück
Oben