【问题标题】:JFrame with an Applet and a JPanel Menu带有小程序和 JPanel 菜单的 JFrame
【发布时间】:2015-10-09 13:23:00
【问题描述】:

我在 JFrame 中有一个 JPanel 和一个 Applet,我试图像这样对齐它们:

我几乎要为此脱发,因为它似乎很难对齐......

这是我真正的sn-p:

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

非常感谢您的关注!

【问题讨论】:

标签: java swing applet jpanel layout-manager


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多