java jpanel对齐_java-JPanel中按钮的中心对齐

考虑将JPanel嵌套使用各自的布局. BoxLayout可以让您居中放置JButton的内部JPanel.内部面板使用GridLayout,而使用外部JPanel的BoxLayout在顶部和底部添加了胶水:

JPanel innerSelectPanel = new JPanel(new GridLayout(0, 1, 0, 5));

// innerSelectPanel.setPreferredSize(new Dimension(50, 0));

innerSelectPanel.add(selectAllButton);

innerSelectPanel.add(selectButton);

innerSelectPanel.add(deselectButton);

innerSelectPanel.add(deselectAllButton);

innerSelectPanel.setOpaque(false);

innerSelectPanel.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));

selectButtonsPanel.setLayout(new BoxLayout(selectButtonsPanel, BoxLayout.PAGE_AXIS));

selectButtonsPanel.add(Box.createVerticalGlue());

selectButtonsPanel.add(innerSelectPanel);

selectButtonsPanel.add(Box.createVerticalGlue());

例如:

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import javax.swing.*;

import javax.swing.table.DefaultTableModel;

public class TestFrame2 extends JPanel {

public static final String[] COLS = { "One", "Two", "Three" };

public static final String[][] BTN_LABELS = { { "S", "S", "D", "D" },

{ "A", "U", "D", "D" } };

public TestFrame2() {

setLayout(new GridLayout(1, 0));

for (int i = 0; i < 2; i++) {

add(createPanel(i));

}

}

private JPanel createPanel(int row) {

int gap = 3;

JPanel btnPanel = new JPanel(new GridLayout(0, 1, 0, gap));

btnPanel.setBorder(BorderFactory.createEmptyBorder(0, gap, 0, gap));

btnPanel.setOpaque(false);

for (int i = 0; i < BTN_LABELS[row].length; i++) {

JButton btn = new JButton(BTN_LABELS[row][i]);

btnPanel.add(btn);

}

btnPanel.setMaximumSize(btnPanel.getPreferredSize());

JPanel rightPanel = new JPanel();

rightPanel.setBackground(Color.red);

rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));

rightPanel.add(Box.createVerticalGlue());

rightPanel.add(btnPanel);

rightPanel.add(Box.createVerticalGlue());

JPanel panel = new JPanel(new BorderLayout());

panel.add(new JScrollPane(new JTable(new DefaultTableModel(COLS, 5))),

BorderLayout.CENTER);

panel.add(rightPanel, BorderLayout.LINE_END);

return panel;

}

private static void createAndShowGui() {

TestFrame2 mainPanel = new TestFrame2();

JFrame frame = new JFrame("TestFrame2");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().add(mainPanel);

frame.pack();

frame.setLocationByPlatform(true);

frame.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

createAndShowGui();

}

});

}

}


版权声明:本文为weixin_35893552原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。