正确的布局可以灵活设置每个屏幕尺寸的JFrame和JInternalFrame

时间:2012-12-10 12:37:35

标签: java swing layout jframe jinternalframe

  

可能重复:
  Example Program JMenubar on JInternalFrame when i Maximize the JInternalFrame

我正在使用Swing应用程序,我是Layouts的新手,我希望我的JFrame和所包含的JInternalFrameJFrame时获取屏幕的大小是最大化或可调整大小,我添加了一个网格布局,但它没有工作。 所以我问如何添加适当的布局以及如何实现它:D。 请帮忙。

2 个答案:

答案 0 :(得分:3)

作为@ Catalina的想法的示例,您可以使用setFullScreenWindow(),如图所示here,并将JDesktopPane添加到框架的中心。不要忘记pack()你的内部框架。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;

/**
 * @see https://stackoverflow.com/a/13806057/230513
 * @see https://stackoverflow.com/questions/7456227
 */
public class FullScreenTest {

    public static final String TITLE = "Full Screen Test";
    private final JFrame f = new JFrame(TITLE);
    private final JDesktopPane jdp = new JDesktopPane();

    public FullScreenTest() {
    }

    private void display() {
        GraphicsEnvironment env =
            GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice dev = env.getDefaultScreenDevice();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JInternalFrame jif = new JInternalFrame(TITLE, true, true, true);
        jif.add(new JLabel(TITLE + " " + TITLE), BorderLayout.NORTH);
        jif.add(new JLabel(TITLE + " " + TITLE), BorderLayout.CENTER);
        jif.add(new JLabel(TITLE + " " + TITLE), BorderLayout.SOUTH);
        jif.pack();
        jif.setLocation(100, 100);
        jif.setVisible(true);
        jdp.add(jif);
        f.add(jdp, BorderLayout.CENTER);
        dev.setFullScreenWindow(f);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new FullScreenTest().display();
            }
        });
    }
}

答案 1 :(得分:2)

您确实需要将JInternalFrame放在JDesktopPane中,就像How to Use Internal Frames中所示。如果您在GridLayout上使用JFrame,则JDesktopPane会随着框架而增长。您已经知道如何使框架适合屏幕,例如here