2

可能重复:
当我最大化 JInternalFrame 时 JInternalFrame 上的示例程序 JMenubar

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

4

2 回答 2

3

作为@Catalina 想法的一个示例,您可以使用setFullScreenWindow(),如此处所示并将 添加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();
            }
        });
    }
}
于 2012-12-10T17:32:08.797 回答
2

你真的需要把你的JInternalFrame放在一个JDesktopPane,就像他们在如何使用内部框架中展示的那样。如果你GridLayout在你的 上使用 a JFrame,你JDesktopPane会随着框架一起成长。您已经知道如何使框架适合屏幕,就像这里一样。

于 2012-12-10T13:46:05.550 回答