2017-03-21 3 views
0

Ich bin in den frühen Phasen der Herstellung von Battleships (gerade begann einen Computer-Abschluss) und hatte Eclipse unter Windows verwendet. Bisher habe ich gerade die Grids erstellt und den jbuttons einen Actionlistener hinzugefügt, so dass sie beim Klick die Farbe ändern.Code funktioniert auf Windows, aber nicht auf dem Mac

Es funktioniert gut, wenn ich es auf meinem Windows-PC ausführen, aber wenn ich versuche, es auf einem Mac auszuführen, zeigt es nur das grundlegende Raster und ändert Farben oder nichts.

Jeder hatte ein Problem wie dieses oder kann helfen? Ich kann nicht herausfinden, warum es bei einem und nicht beim anderen funktionieren würde.

Dank

Hier ist mein Code, wenn das hilft (ich weiß es jetzt nicht elegant oder irgendetwas ist)

public class BattleshipFrame { 
    public static void main(String[] args) { 

     //creating JFrame 
     JFrame frame = new JFrame("Battleship"); 
     frame.setLayout(new GridLayout(1, 3)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //creating User Panel 
     JPanel userpanel = new JPanel(); 
     userpanel.setLayout(new GridLayout(10, 10)); 
     userpanel.setSize(400, 400); 

     //creating JButton array 
     JButton[] button = new JButton[100]; 

     //putting JButtons in User Panel 
     for (int i = 0; i < 100; i++) { 
      button[i] = new JButton(); 
      button[i].setBackground(Color.BLUE); 
      userpanel.add(button[i]); 


      //changing colour of buttons when clicked 
      button[i].addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent ev) { 
        Object source = ev.getSource(); 
        if (source instanceof Component) { 
         ((Component) source).setBackground(Color.GREEN); 
        } 
       } 
      }); 
     } 

     //creating computer panel 
     JPanel comppanel = new JPanel(); 
     comppanel.setLayout(new GridLayout(10, 10)); 
     comppanel.setSize(400, 400); 

     //putting JButtons in User Panel 
     for (int i = 0; i < 100; i++) { 
      button[i] = new JButton(); 
      button[i].setBackground(Color.BLUE); 
      comppanel.add(button[i]); 


      //changing colour of buttons when clicked 
      button[i].addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent ev) { 
        Object source = ev.getSource(); 
        if (source instanceof Component) { 
         ((Component) source).setBackground(Color.GREEN); 
        } 
       } 
      }); 
     } 

     //creating menu panel 
     JPanel menupanel = new JPanel(); 


     //creating buttons for menu 
     JButton save = new JButton("Save"); 
     JButton load = new JButton("Load"); 

     save.setPreferredSize(new Dimension(100, 100)); 
     load.setPreferredSize(new Dimension(100, 100)); 

     //adding buttons to menu panel 
     menupanel.add(save); 
     menupanel.add(load); 

     //adding panels into frame 
     frame.add(userpanel, BorderLayout.WEST); 
     frame.add(menupanel, BorderLayout.CENTER); 
     frame.add(comppanel, BorderLayout.EAST); 
     frame.setVisible(true); 
     frame.setSize(2000, 1000); 
    } 

} 

Wie gesagt, es funktioniert perfekt auf meinem Windows-Eklipse, aber nicht auf dem Mac

+2

Haben Sie versucht, Debugging auf dem Mac-Computer zu tun? –

+0

[Warum kann "Kann mir jemand helfen?" Keine eigentliche Frage?] (Http://meta.stackoverflow.com/q/284236) – Andreas

+0

Für was es wert ist, ist eine Reihe von Tasten wahrscheinlich eine schlechte Wahl hier; Versuchen Sie, das Board zu Ihrer eigenen Subklasse von JPanel zu machen. Sie können dann Mauslistener an die Komponente anhängen und die Mausklicks mithilfe von Mathematik an den x, y-Koordinaten abrufen. – Charlie

Antwort

0

Ja, Sie müssen diese Eigenschaft unter Mac OS einstellen.

button[i] = new JButton(); 
button[i].setOpaque(true); 

bearbeitet meine Antwort hinzufügen diese

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()) 

dies wird es funktioniert.

+0

Dies hat mir etwas Farbe gegeben, danke für Ihre Hilfe, aber es setzt nur die Grenze und nicht den Hintergrund des jbutton, wie es sein sollte. – DJCuzzles

+0

Dies wird backgound Farbe beheben, sondern wird standardmäßig Ihre UI UIManager.setLookAndFeel (UIManager.getCrossPlatformLookAndFeelClassName()); – 7663233

Verwandte Themen