Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel中按钮的中心对齐_Java_Swing_Jpanel - Fatal编程技术网

Java JPanel中按钮的中心对齐

Java JPanel中按钮的中心对齐,java,swing,jpanel,Java,Swing,Jpanel,如何将按钮(S、S、D&D和A、U、D&D)与面板中间(蓝色和红色)对齐?面板可以增长(高度不是宽度),但是按钮应该保持在中间并且保持相同的尺寸。所以GridLayout已经过时了 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import java.awt.Dimension; import java.awt.FlowLayout;

如何将按钮(S、S、D&D和A、U、D&D)与面板中间(蓝色和红色)对齐?面板可以增长(高度不是宽度),但是按钮应该保持在中间并且保持相同的尺寸。所以GridLayout已经过时了



    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTable;

    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;

    import javax.swing.JButton;
    import java.awt.BorderLayout;
    import java.awt.Color;


    public class TestFrame extends JFrame {
        /**
         * 
         */
        private static final long serialVersionUID = 5671798241966272024L;

        public TestFrame() {

            FlowLayout layout = new FlowLayout();

            JButton moveUpButton = new JButton("U");
            JButton moveAllUpButton = new JButton("A");

            JButton moveDownButton = new JButton("D");
            JButton moveAllDownButton = new JButton("D");

            JButton selectButton = new JButton("S");
            JButton selectAllButton = new JButton("S");

            JButton deselectButton = new JButton("D");
            JButton deselectAllButton = new JButton("D");


            setSize(600, 400);

            getContentPane().setLayout(new GridLayout());


            JPanel selectButtonsPanel = new JPanel();
            selectButtonsPanel.setBackground(Color.BLUE);

            selectButtonsPanel.setLayout(layout);
            selectButtonsPanel.setPreferredSize(new Dimension(50, 0));
            selectButtonsPanel.add(selectAllButton);
            selectButtonsPanel.add(selectButton);
            selectButtonsPanel.add(deselectButton);
            selectButtonsPanel.add(deselectAllButton);

            JPanel moveButtonsPanel = new JPanel(layout);
            moveButtonsPanel.setBackground(Color.RED);
            moveButtonsPanel.setLayout(layout);
            moveButtonsPanel.setPreferredSize(new Dimension(50, 0));
            moveButtonsPanel.add(moveAllUpButton);
            moveButtonsPanel.add(moveUpButton);
            moveButtonsPanel.add(moveDownButton);
            moveButtonsPanel.add(moveAllDownButton);


            JPanel sourcePanel = new JPanel ();
            sourcePanel.setLayout(new BorderLayout());
            sourcePanel.add(new JTable(), BorderLayout.CENTER);
            sourcePanel.add(selectButtonsPanel, BorderLayout.EAST);


            JPanel destinationPanel = new JPanel ();
            destinationPanel.setLayout(new BorderLayout());
            destinationPanel.add(new JTable(), BorderLayout.CENTER);
            destinationPanel.add(moveButtonsPanel, BorderLayout.EAST);


            getContentPane().add (sourcePanel);
            getContentPane().add(destinationPanel);


        }

    }


考虑使用各自的布局嵌套JPanel。BoxLayout可以让您将容纳JButtons的内部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();
         }
      });
   }
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.GridLayout;
导入javax.swing.*;
导入javax.swing.table.DefaultTableModel;
公共类TestFrame2扩展了JPanel{
公共静态最终字符串[]COLS={“一”、“二”、“三”};
公共静态最终字符串[][]BTN_标签={{{“S”、“S”、“D”、“D},
{“A”、“U”、“D”、“D”};
公共测试框架2(){
setLayout(新的GridLayout(1,0));
对于(int i=0;i<2;i++){
添加(createPanel(i));
}
}
专用JPanel createPanel(int行){
int gap=3;
JPanel btnPanel=新的JPanel(新的网格布局(0,1,0,gap));
btnPanel.setBorder(BorderFactory.createEmptyByOrder(0,间隙,0,间隙));
btnPanel.set不透明(假);
对于(int i=0;i
当前代码有什么问题?按钮是顶部对齐的。很好的例子。我只需要开始使用嵌套面板。我开始认为Swing是一个比其他GUI更好的GUI(非常动态)。