-1

複数の JInternalFrame を作成します。正常に動作しています。ただし、JInternalFrame を作成すると、既存のフレームに上書きされます。テーブルセル(行ごと)のようなJInternalFrameが必要です。

4

1 に答える 1

3

JInternalFrameに配置する場所とサイズを指定する必要があります。

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.SystemColor;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestInternalFrameLayout {

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

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

                final JDesktopPane desktop = new JDesktopPane();

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(desktop);
                frame.setSize(420, 420);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        int rowCount = 2;
                        int colCount = 4;

                        int width = desktop.getWidth() / colCount;
                        int height = desktop.getHeight() / rowCount;

                        System.out.println(width + "x" + height);

                        for (int row = 0; row < rowCount; row++) {
                            int y = row * height;
                            for (int col = 0; col < colCount; col++) {
                                int x = col * width;
                                JInternalFrame frame = new JInternalFrame(row + "x" + col, true, true, true, true);
                                frame.setBounds(x, y, width, height);
                                frame.setVisible(true);
                                desktop.add(frame);
                            }
                        }
                    }
                });
            }
        });
    }
}

ここで、質問にコンテキストがまったく提供されていないため、何が必要なのかを正確に知ることは困難です.

時間の経過とともにフレームが追加される場合は、必要に応じてフレームを配置する最適な場所を決定する必要があります。一般的なアプローチは、新しいフレームを追加するときに必要に応じてインクリメントするstatic xand値を使用することです。y

必要に応じてウィンドウを自動的に並べて表示する独自の「パック」アルゴリズムを作成できます。

s のGridLayout代わりにa を使用することもできます。JInternalFrame

于 2013-09-13T04:59:37.330 に答える