2 Stimmen

Hinzufügen von JButtons zu einem JPanel, dessen Layout ein "GridLayout" ist

Ich entwickle eine GUI, die die Java Swing Bibliothek verwendet. Ich möchte einige JButtons zu einem Jpanel hinzufügen, das ein Gridlayout als Layout verwendet, aber ich habe ein Problem, die Größe des Panels ist ungefähr die gesamte Größe des Monitors, aber die Größe der JButtons kann unterschiedlich sein, ich kann ein 3*3 Array von JButtons zum Panel hinzufügen, während ich ein 10 * 10 Array zum Panel hinzufügen kann, das Problem ist, dass, wenn ich ein 3*3 hinzufüge, die JButtons so groß sein würden, dass sie das gesamte Display einnehmen, auch die JPanel auf der Oberseite des aktuellen JPanel (die Optionen genannt wird), was sollte ich tun, um eine konstante Größe für JButtons, so dass ihre Größe nicht geändert, auch wenn sie 2 Jbuttons (die jetzt nimmt die gesamte Anzeige) (die setSize-Funktion wird nicht funktionieren, und ich möchte das Layout zu einem GridLayout, nicht null), hier sind einige Teile des Codes:

public class Edit extends JFrame{   
public Edit ()
{
    width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
    height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
    newer = new JButton(new ImageIcon(b)) ;
    done = new JButton(new ImageIcon(f)) ;
    savior = new JButton(new ImageIcon(d)) ;
    undo = new JButton(new ImageIcon(h)) ;
    newer.setSize(200, 60);
    done.setSize(200, 60);
    savior.setSize(200, 60);    
    undo.setSize(200, 60);
    options = new JPanel();
    options.setSize(width , 100);
    options.setLayout(new GridLayout(1,5,(width- 1000)/6,20)) ;
    options.add(newer);
    options.add(done);
    options.add(savior);
    options.add(undo);
    options.setBackground(Color.magenta);
    options.add(selector);
    this.setExtendedState(this.MAXIMIZED_BOTH);
    this.setUndecorated(true);
    this.setVisible(true);
    view = new JPanel();
    regions = new JButton[3][3];
    view.setSize(width, height - 100) ; 
    view.setLayout(new GridLayout(3,3));
    for(int i=0;i<3;i++)
                for(int j=0;j<3;j++)
        {
                regions[i][j] = new JButton(); 
                    regions[i][j].setSize(80,80) ;
            view.add(regions[i][j]);
            }
    editPhase = new JPanel();
    editPhase.setLayout(null);
    editPhase.add(options,BorderLayout.NORTH);
    editPhase.add(view,BorderLayout.SOUTH);
    this.add(editPhase);
    }
}

vielen Dank im Voraus.

4voto

aardvarkk Punkte 13824

Hier ist eine Umsetzung mit Ideen aus dem Kommentar:

public class Main {

  public static void main(String[] args) {
    JFrame frame = new JFrame();

    int gridSize = 3; // try 4 or 5, etc. buttons are always 50x50

    JPanel panel = new JPanel(new GridLayout(gridSize, gridSize));
    panel.setPreferredSize(new Dimension(500, 500));

    for (int i = 0; i < gridSize; i++) {
      for (int j = 0; j < gridSize; j++) {
        JPanel buttonPanel = new JPanel(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();
        c.anchor = GridBagConstraints.CENTER;

        JButton button = new JButton();
        button.setPreferredSize(new Dimension(50, 50));
        buttonPanel.add(button, c);
        panel.add(buttonPanel);
      }
    }
    frame.setContentPane(panel);
    frame.pack();
    frame.setVisible(true);
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X