什么Java JPanel布局允许中心、侧面和角点元素?

什么Java JPanel布局允许中心、侧面和角点元素?,java,swing,jpanel,Java,Swing,Jpanel,我有以下GUI代码: package rubiksCube; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleGui extends JFrame{ int[] px2; int[] py2; int[] pz2; Graphics g2 = null; int sN;

我有以下GUI代码:

    package rubiksCube;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class SimpleGui  extends JFrame{
        int[] px2;
        int[] py2;
        int[] pz2;
        Graphics g2 = null;
        int sN;


    public SimpleGui(){
        JButton solve = new JButton();
        JPanel p = new JPanel();
        solve.setText("Solve");
        solve.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e){
            Control c = new Control();
            c.solve();
        }});
        solve.addKeyListener(new KeyListener(){


            public void keyPressed(KeyEvent k) {
                switch (k.getKeyCode()){
                case KeyEvent.VK_DOWN:

                    break;
                case KeyEvent.VK_UP:

                    break;
                case KeyEvent.VK_LEFT:

                    break;
                case KeyEvent.VK_RIGHT:

                    break;
                case KeyEvent.VK_0:

                    break;
                case KeyEvent.VK_1:

                    break;
                case KeyEvent.VK_2:

                    break;
                case KeyEvent.VK_3:

                    break;
                case KeyEvent.VK_4:

                    break;
                case KeyEvent.VK_5:

                    break;
                case KeyEvent.VK_6:

                    break;
                case KeyEvent.VK_7:

                    break;
                case KeyEvent.VK_8:

                    break;
                case KeyEvent.VK_9:

                    break;
                case KeyEvent.VK_MINUS:

                    break;
                case KeyEvent.VK_EQUALS:

                    break;

                }


            }


            public void keyReleased(KeyEvent k) {


            }


            public void keyTyped(KeyEvent k) {


            }

        });
        JButton random = new JButton();
        random.setText("Randomize");
        random.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e){
            Control c = new Control();
            c.random();
        }});
        p.setVisible(true);
        solve.setVisible(true);
        p.add(solve);
        p.add(random);
        p.add(new Display());
        add(p);
        setContentPane(p);
        setVisible(true);
    }}

现在我希望组件(new DePosiy())显示在屏幕中间,而JButtons解决方案和随机出现在右上角。如果您想知道,new Display()是一个扩展JPanel并显示图形的类。

BorderLayout
将为您提供基本要求(中间和右侧),但如果您有多个按钮,则可能需要使用类似于
GridBagLayout
的内容来完成第二个要求,但是
FlowLayout
可能也能实现它

更新了一个示例

这是一个简单的概念证明示例

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class SimpleGui {

    public static void main(String[] args) {
        new SimpleGui();
    }

    public SimpleGui() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());

                JButton btn = new JButton("Solve");
                JPanel right = new JPanel();
                right.add(btn);
                frame.add(right, BorderLayout.EAST);

                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setBackground(Color.BLUE);
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}


我会用两个布局管理器

JPanel outerPanel = new JPanel();
outerPanel.setLayout(new BorderLayout());
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
outerPanel.add(buttonPanel, BorderLayout.NORTH);
buttonPanel.add(solve);
buttonPanel.add(random);
outerPanel.add(new Display(), BorderLayout.CENTER);

类似这样的内容,我没有编译它,但你应该明白了。

谢谢,还有1,你知道如何设置这些布局,或者我可以在哪里找到它们的信息吗?你可以看看