2017-05-30 3 views
-1

Ich habe schon eine Weile gegooglet, aber ich finde nicht, wonach ich suche. Ich versuche eine einfache GUI zu erstellen, wo mein contentPane ein JPanel mit einem GridLayout enthält.Java Swing: n × m GridLayout mit z.B. [n-1, m-1] = grün

Ich möchte ein Raster von etwa 3x3 und füllen Sie die untere rechte Zelle mit einem grünen Hintergrund-jpanel. Der Rest der Zellen soll jetzt weiß sein. Wie erreiche ich das?

Ich weiß, dass ich for-Schleife und füllen Sie alle anderen Zellen mit white-background-jpanels. Aber das ist für den Rest des Projekts nicht machbar. Was ist die richtige/nicht-Hacker-Art, dies zu tun? Ich möchte nur ein Gitter, wo ich sagen kann "Schau, es ist n x m und für jetzt möchte ich nur nur Zeile 3 Spalte 4 füllen"

+4

Haben Sie 'JPanels' in allen Zellen? Sie können ein 'Array' der Dimension' nxm' von 'JPanel' haben, das zum' GridLayout' hinzugefügt werden soll und dann können Sie direkt auf das 'grid [n] [m]' th 'JPanel' zugreifen und seine Farbe einstellen . –

+0

Es klingt ziemlich direkt in meinen Ohren. Was hast du probiert? Zeig uns deinen Code! Wie scheitert es? –

+1

Es scheint mir die Frage ist, wie Ihr Code ist, um die Anzahl der Zeilen und Spalten zu bestimmen, so dass es die richtigen Indizes für die untere rechte Zelle verwenden kann. Wie das geht, können wir ohne den Kontext nicht sagen. Vielleicht können Sie [ein minimales, vollständiges und überprüfbares Beispiel erstellen] (https://stackoverflow.com/help/mcve)? –

Antwort

1

Okay, ich habe es :)) Danke Sanket Makani, ich folgte Ihrer Idee! Jetzt kann ich ändern, welches Feld ich in meinem Raster möchte. Hier ist das vollständige Codebeispiel:

import java.awt.event.*; 
import java.awt.*; 
import javax.swing.*; 


public class Test { 

    public static void main(String[] args) { 

     // frame 
     JFrame frame = new JFrame("Pedigree Builder"); 
     frame.setPreferredSize(new Dimension(400, 300)); 

     // menu bar 
     JMenuBar menubar = new JMenuBar(); 
     frame.setJMenuBar(menubar); 

     // "file" menu 
     JMenu fileMenu = new JMenu("File"); 
     menubar.add(fileMenu); 

     // exit button for "file" menu 
     JMenuItem exitMenuItem = new JMenuItem("Exit"); 
     exitMenuItem.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent event) { 
       System.exit(0); 
      } 

     }); 
     fileMenu.add(exitMenuItem); 

     // content pane = grid 
     JPanel contentPane = new JPanel(new GridLayout(0, 3)); 
     frame.setContentPane(contentPane); 

     // init array of fields for the grid 
     JPanel[] fieldArray = new JPanel[9]; 
     for (int i = 0; i < fieldArray.length; i++){ 
      fieldArray[i] = new JPanel(); 
      contentPane.add(fieldArray[i]); 
     } 

     // modify content of particular cell (in this case: bottom right) 
     fieldArray[8].setBackground(Color.green); 

     frame.pack(); 
     frame.setVisible(true); 

    } 

}