Java 带有Applet和JPanel菜单的JFrame

Java 带有Applet和JPanel菜单的JFrame,java,swing,applet,jpanel,layout-manager,Java,Swing,Applet,Jpanel,Layout Manager,我在JFrame中有一个JPanel和一个小程序,我试着像这样对齐它们: 我几乎松了我的头发,因为它似乎很难对齐 这是我的真实片段: JFrame的开口非常小,只有按钮 final JFrame f = new JFrame(); JPanel appletPanel = new JPanel(); appletPanel.setBackground(Color.RED); JPanel menuPanel = new JPanel(); menuPane

我在JFrame中有一个JPanel和一个小程序,我试着像这样对齐它们:

我几乎松了我的头发,因为它似乎很难对齐

这是我的真实片段:

JFrame的开口非常小,只有按钮

 final JFrame f = new JFrame();

    JPanel appletPanel = new JPanel();
    appletPanel.setBackground(Color.RED);

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


    f.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

   // f.setExtendedState(JFrame.MAXIMIZED_BOTH);
   // f.setResizable(false);
    int w = Toolkit.getDefaultToolkit().getScreenSize().width;
    int h = Toolkit.getDefaultToolkit().getScreenSize().height;

    f.setSize(Toolkit.getDefaultToolkit().getScreenSize());
    VNCApplet applet = new VNCApplet();

    menuPanel.add(new JButton("TEST"));

    appletPanel.setSize((int)(w*0.7),h);
    menuPanel.setSize((int)(w*0.3),h);

    c.gridx = 0;
    c.gridy = 0;

    f.getContentPane().add(appletPanel,c);

    c.gridx = 0;
    c.gridy = 1;


    f.getContentPane().add(menuPanel,c);

    f.pack();
    applet.init();
    applet.start();
    f.setVisible(true);

非常感谢您的关注

使用单个布局(例如
GridBagLayout
GroupLayout
)可以通过多种方式实现该布局,但我会将其作为布局的组合。像这样:

import java.awt.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
导入javax.swing.border.EmptyBorder;
导入javax.swing.border.TitledBorder;
公共类appletWithButtonRight{
私有JComponent ui=null;
AppletWithButtonsOnRight(){
initUI();
}
public void initUI(){
如果(ui!=null)返回;
ui=新JPanel(新边界布局(4,4));
ui.setboorder(新标题边框(“边框布局(4,4)”);
JPanel appletPanel=newjpanel(newgridlayout());
appletPanel.setBackground(颜色:红色);
appletPanel.add(新的JLabel(新的图像图标(新的BufferedImage(400300,BufferedImage.TYPE_INT_ARGB)));
ui.add(appletPanel);
JPanel menuPanel=newjpanel(newborderlayout());
menuPanel.setBorder(新标题边框(“BorderLayout()”));
添加(菜单面板、边框布局、线条结束);
JPanel buttonPanel=新的JPanel(新的网格布局(0,1,10,10));
按钮面板设置顺序(新标题边框(“网格布局(0,1,10,10)”);
menuPanel.add(按钮面板,边框布局,页面开始);
对于(int i=1;i1)
f.pack();applet.init();applet.start();f.setVisible(true);
应该是
applet.init();applet.start();f.pack();f.setVisible(true);
调用
pack()
将框架设置为显示其包含的组件所需的最小大小。但小程序在调用
init()
方法之前不会添加组件。2)要获得更好的帮助,请尽快发布或。3)请参阅(是)
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

public class AppletWithButtonsOnRight {

    private JComponent ui = null;

    AppletWithButtonsOnRight() {
        initUI();
    }

    public void initUI() {
        if (ui!=null) return;

        ui = new JPanel(new BorderLayout(4,4));
        ui.setBorder(new TitledBorder("BorderLayout(4,4)"));

        JPanel appletPanel = new JPanel(new GridLayout());
        appletPanel.setBackground(Color.RED);
        appletPanel.add(new JLabel(new ImageIcon(new BufferedImage(400, 300, BufferedImage.TYPE_INT_ARGB))));
        ui.add(appletPanel);

        JPanel menuPanel = new JPanel(new BorderLayout());
        menuPanel.setBorder(new TitledBorder("BorderLayout()"));
        ui.add(menuPanel, BorderLayout.LINE_END);

        JPanel buttonPanel = new JPanel(new GridLayout(0, 1, 10, 10));
        buttonPanel.setBorder(new TitledBorder("GridLayout(0,1,10,10)"));
        menuPanel.add(buttonPanel, BorderLayout.PAGE_START);

        for (int i=1; i<5; i++) {
            JButton b = new JButton("Button " + i);
            b.setFont(b.getFont().deriveFont(24f));
            buttonPanel.add(b);
        }
    }

    public JComponent getUI() {
        return ui;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception useDefault) {
                }
                AppletWithButtonsOnRight o = new AppletWithButtonsOnRight();

                JFrame f = new JFrame(o.getClass().getSimpleName());
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);

                f.setContentPane(o.getUI());
                f.pack();
                f.setMinimumSize(f.getSize());

                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}