добавление JButtons к JPanel, макет которого является "GridLayout" - PullRequest
2 голосов
/ 06 июля 2011

Я занимаюсь разработкой графического интерфейса с использованием библиотеки Java Swing. Я хочу добавить несколько JButton-ов в Jpanel, которая использует Gridlayout в качестве макета, но у меня проблема, размер панели примерно равен размеру монитора,но размер JButtons может быть другим, я могу добавить массив 3 * 3 кнопок J на ​​панель, в то время как я могу добавить массив 10 * 10 на панель, проблема в том, что если я добавлю 3 * 3, то кнопки jбыло бы настолько большим, чтобы занимать весь экран, даже JPanel в верхней части текущего JPanel (который называется опциями), что я должен сделать, чтобы установить постоянный размер для JButtons, чтобы их размер не изменился, даже если они2 Jbutton (которые теперь занимают весь экран) (функция setSize не будет работать, и я хочу, чтобы макет был GridLayout, а не null), вот некоторые части кода:

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);
    }
}

спасибо ваванс.

1 Ответ

4 голосов
/ 06 июля 2011

Вот реализация, использующая идеи из комментария:

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);
  }
}
...