简体   繁体   中英

Trying to put buttons on the bottom of the screen

So after a day of studying layout managers and reading some swing refrences, this is what i come up with...

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


}
}

The problem is that i want my buttons to start at the bottom left and be equally spaced between the 4 other buttons i want to make.

There's a number of ways you "might" achieve this and the solution will ultimately depend on what you are trying to achieve.

Personally, I'd start with GridBagLayout - while not the friendliness of layout managers, it is by far the most flexible.

简单的菜单

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

  }
}

Another choice might be to use compound layouts, so that the "button" panel is placed at the SOUTH position of a BorderLayout and the "content" placed in the CENTER

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM