JButton überlagern sich und werden erst beim Mausscrollen sichtbar

Tiger87

Mitglied
Hallo,

ich bin dabei mit ein JButton Spielfeld für Schiffeversenken zu erstellen.

Ich schreib mal einen ganz kurzen Überblick über meine GUI, damit man den Aufbau besser nachvollziehen kann. Meine View(Hauptklasse) erbt von JFrame. View bekommt ein JPanel mit Cardlayout , damit zwischen den einzelnen Spielfeldern gewechselt werden kann. Dieses JPanel bekommt zum Umschalten zwei JPanels. Darin ist jeweils der Titel des Spielfeldes und das Spielfeld enthalten. Das Spielfeld ist selber ein JPanel mit Gridlayout. In dieses werden 12*12 JButtons eingefügt. Alle JButton haben ein ImageIcon. Das ganze soll so gestaltet sein, dass das Spielfeld bis zur Erstellung eines neuen Spiels zwar sichtbar, aber deaktiviert sein soll. Dafür benutze ich setIcon(imageicon) und setDisabledIcon(imageicon).

Mein Problem:
-Wenn ich die JButtons in der Initialisierung deaktiviere, wird nur der erste JButton dargestellt. Ich vermutte, dass alle JButtons übereinander gelagert werden.


- Wenn ich die JButtons aktiviert lassen, dann werden sie richtig platziert, aber erscheinen erst, wenn man mit dem Mouszeiger darüber fährt.


Der Übersichtshalber habe ich die Klassen, Methoden und Variablen dargestellt, die für mein Problem relvant sind. Controller und Modell sind nicht dargestellt, da das einzige was man dzu wissen muss ist, dass ein Controller ein Modell hat und ein Modell zwei GamefieldPanel (Für Player A und PlayerB) hat.

Java:
public class View extends JFrame {
    //Controller
    private Controller controller;

    //Gui Initialisierung
    private JButton umschalt= new JButton("umschalt");
 
    private Umschalter umschalter;
    private JPanel fensteraufteilung = new JPanel();
    private JPanel fensteraufteilung2 = new JPanel();
    private JPanel fensteraufteilung3 = new JPanel();
    private CardLayout cardLayout;
    private Wechsler wechsler;
    private JLabel titel1 = new JLabel("PlayerA");
    private JLabel titel2 = new JLabel("PlayerB");
    private JLabel consolelabel1 = new JLabel("Mitteilung");
    private JLabel consolelabel2 = new JLabel("Eingabe");
    private JTextArea textfeld = new JTextArea(6,100);
    private JScrollPane scrollpane = new JScrollPane(textfeld);
    private int gamecount =0;
    private int playerSchiffe =9;

    public View(){
        controller = new Controller();
        cardLayout= new CardLayout();
        this.setSize(1500, 900);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        umschalt.setPreferredSize(new Dimension(100,400));
        umschalter = new Umschalter();
        umschalt.addActionListener(umschalter);
        umschalt.setBounds(800, 50, 200, 50);

        titel1.setVisible(true);
        titel1.setSize(new Dimension(50, 10));
        titel2.setVisible(true);
        titel2.setSize(new Dimension(50, 10));

        fensteraufteilung2.setLayout(new BorderLayout());
        fensteraufteilung3.setLayout(new BorderLayout());

        fensteraufteilung2.add(titel1,BorderLayout.PAGE_START);
        fensteraufteilung2.add(controller.getModell().getFieldA(),BorderLayout.CENTER);
        fensteraufteilung3.add(titel2,BorderLayout.PAGE_START);
        fensteraufteilung3.add(controller.getModell().getFieldB(),BorderLayout.CENTER);

        fensteraufteilung.setLayout(cardLayout);
        fensteraufteilung.add(fensteraufteilung2);
        fensteraufteilung.add(fensteraufteilung3);
        fensteraufteilung.setPreferredSize(new Dimension(800, 800));
        fensteraufteilung.setBounds(30, 50, 700, 750);

        textfeld.setVisible(true);
        textfeld.setEditable(false);

        consolelabel1.setVisible(true);
        consolelabel1.setBounds(800, 100, 100, 20);
        consolelabel2.setVisible(true);
        consolelabel2.setBounds(800, 650, 100, 20);

        scrollpane.setVisible(true);
        scrollpane.setBounds(800, 150, 600, 500);

        JTextfieldprinterstream writer = new JTextfieldprinterstream(textfeld,System.out);
        System.setOut(writer);
        System.setErr(writer);

        this.setLayout(null);
        this.add(fensteraufteilung);
        this.add(umschalt);
        this.add(scrollpane);
        this.add(start);
        this.add(bestaetigung);
        this.add(consolelabel1);
        this.add(consolelabel2);
        this.setVisible(true);

        wechsler = new Wechsler(cardLayout, umschalter,fensteraufteilung);
        wechsler.umschalter.addObserver(wechsler);
        wechsler.setDaemon(true);
        wechsler.run();

        this.revalidate();
        this.repaint();
        this.setVisible(true);
    }

Java:
public class GamefieldPanel extends JPanel {
    private HashMap buttons = new HashMap();
    private GridLayout gridlayout = new GridLayout();
    private String[] buttonletter = new String[]{"WN","J","I","H","G","F","E","D","C","B","A","WS"};
    private String[] buttonnumbers = new String[]{"0","1","2","3","4","5","6","7","8","9","10","11"};

    public GamefieldPanel() {
        gridlayout.setRows(12);
        this.setLayout(gridlayout);
        this.setPreferredSize(new Dimension(700, 700));
        createButtonfield();
        this.validate();
        this.repaint();
        this.setVisible(true);
    }

    private void createButtonfield(){

        for ( int i = 0; i < 12; i++ ) {
            for ( int j = 0; j < 12; j++ ) {
                Buttonsquare temp;
                if (i ==0){
                    temp =new Buttonsquare(new ImageIcon(Imagecontrol.getStone()),i,j);
                    buttons.put(new String(buttonletter[i]+buttonnumbers[j]),temp);
                    this.add(temp);
                }else if (i ==11){
                    if (j == 0 || j == 11){
                        temp =new Buttonsquare(new ImageIcon(Imagecontrol.getStone()),i,j);
                    }else {
                        temp =new Buttonsquare(new ImageIcon(Imagecontrol.getZahlen(j-1)),i,j);
                    }
                    buttons.put(new String(buttonletter[i]+buttonnumbers[j]),temp);
                    this.add(temp);
                }else {

                    if (j==0){
                        temp =new Buttonsquare(new ImageIcon(Imagecontrol.getBuchstaben(i-1)),i,j);
                    }else if (j==11){
                        temp =new Buttonsquare(new ImageIcon(Imagecontrol.getStone()),i,j);
                    } else {
                        temp =new Buttonsquare(new ImageIcon(Imagecontrol.getWater()),i,j);
                    }
                    buttons.put(new String(buttonletter[i]+buttonnumbers[j]),temp);
                    this.add(temp);
                }
            }
        }
        this.revalidate();
        this.repaint();
    }
}

Java:
public class Buttonsquare extends JButton {
    private Squarestatus squarestatus;
    private ImageIcon imageicon;
    private int x;
    private int y;
    private boolean chooseable = true;
    private static boolean gamerun = false;
    private boolean selectet = false;
    private Buttomlistner buttomlistner;

    public Buttonsquare(ImageIcon imageIcon, int x, int y) {
        buttomlistner = new Buttomlistner();
        this.imageicon = imageIcon;
        this.setIcon(imageicon);
        this.setDisabledIcon(imageicon);
        setVisible(true);
        setEnabled(false);
        this.addActionListener(buttomlistner);
        this.x = x;
        this.y = y;
        this.validate();
        this.repaint();
    }

    public void setImageicon(ImageIcon imageicon){
        this.setIcon(imageicon);
    }

    public void chanceStatusAndImage(Squarestatus squarestatus)throws IllegalArgumentException {
        switch ( squarestatus ){
            case BLOCKED:break;
            case DESTROYED: this.imageicon = new ImageIcon(Imagecontrol.getTreffer());break;
            case WATER: this.imageicon = new ImageIcon(Imagecontrol.getWater());break;
            case WASSERTREFFER: this.imageicon = new ImageIcon(Imagecontrol.getWassertreffer());break;
            case SHIP: this.imageicon = new ImageIcon(Imagecontrol.getShip());break;
            case NEBEL: this.imageicon = new ImageIcon(Imagecontrol.getNebel());
                this.setDisabledIcon(imageicon);
                break;
            case WALL:
            case EDGE:break;
            default: throw new IllegalArgumentException();
        }
        this.squarestatus = squarestatus;
        this.revalidate();
        this.repaint();
    }
}
 

VfL_Freak

Top Contributor
Moin,

ich denke, da fehlt noch einiges an Code ...

Was bitte macht beispielsweise die Klasse "Buttomlistner" ???

Gruß Klaus
 

Tiger87

Mitglied
Moin,

ich denke, da fehlt noch einiges an Code ...

Was bitte macht beispielsweise die Klasse "Buttomlistner" ???

Gruß Klaus

Das ist eine Memberklasse von Buttonsquare und soll später bei Mausklick das ImageIcon anpassen. Zum Beispiel wenn die Schiffe gesetzt werden sollen oder im Spiel bei Treffer. Den Code den ich weggelassen habe hat nichts mit der Grundstruktur der GUI zu tun. Mir geht es erstmal darum, dass das Spielfeld angezeigt wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
D Swing JButton.setenabled(true) funktioniert nicht AWT, Swing, JavaFX & SWT 12
B JButton ausblenden AWT, Swing, JavaFX & SWT 12
G JButton deaktivieren greift nicht AWT, Swing, JavaFX & SWT 14
C JButton NullPointerException AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben