Пытаюсь поставить кнопки внизу экрана - PullRequest
0 голосов
/ 22 ноября 2018

Итак, после дня изучения менеджеров по раскладке и прочтения некоторых свинг-ссылок, это то, что я придумаю ...

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

public class Flags {
public static void startup() {
GridLayout Layout = new GridLayout(6,4);
JFrame menu = new JFrame("Flag Menu");
menu.setResizable(false);
menu.setSize(600,400);
JButton tailand = new JButton("Tailand");
JButton norway = new JButton("Norway");
JPanel panel = new JPanel();

panel.setLayout(Layout);
panel.add(norway);
panel.add(tailand);
menu.add(panel);
panel.setBackground(Color.LIGHT_GRAY);
tailand.setBackground(Color.WHITE);
norway.setBackground(Color.WHITE);
menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menu.setLocationRelativeTo(null);
;
menu.setVisible(true);


}
}

Проблема в том, что я хочу, чтобы мои кнопки запускались внизу слеваи находиться на одинаковом расстоянии между 4 другими кнопками, которые я хочу сделать.

1 Ответ

0 голосов
/ 22 ноября 2018

Есть несколько способов, которыми вы можете «достичь» этого, и решение в конечном итоге будет зависеть от того, чего вы пытаетесь достичь.

Лично я бы начал с GridBagLayout - хотя это и не дружелюбие менеджеров по расположению, он, безусловно, самый гибкий.

Simple menu

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Flags {

  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override
      public void run() {
        new Flags().startup();
      }
    });
  }

  public static void startup() {
    GridLayout Layout = new GridLayout(6, 4);
    JFrame menu = new JFrame("Flag Menu");
    //  menu.setResizable(false);
    //  menu.setSize(600, 400);
    menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton tailand = new JButton("Tailand");
    JButton norway = new JButton("Norway");
    JPanel panel = new JPanel(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();

    gbc.weighty = 1;
    gbc.weightx = 1;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    gbc.anchor = GridBagConstraints.SOUTH;
    panel.add(norway, gbc);
    gbc.weighty = 0;
    panel.add(tailand, gbc);

    menu.add(panel);
    panel.setBackground(Color.LIGHT_GRAY);
    tailand.setBackground(Color.WHITE);
    norway.setBackground(Color.WHITE);
    menu.pack();
    menu.setLocationRelativeTo(null);
    menu.setVisible(true);

  }
}

Другим вариантом может быть использование составных макетов, чтобы панель «кнопки» располагалась в позиции SOUTH элемента BorderLayout, а «содержимое» помещалось в CENTER

.
...