複数の JInternalFrame を作成します。正常に動作しています。ただし、JInternalFrame を作成すると、既存のフレームに上書きされます。テーブルセル(行ごと)のようなJInternalFrameが必要です。
質問する
917 次
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
x
and値を使用することです。y
必要に応じてウィンドウを自動的に並べて表示する独自の「パック」アルゴリズムを作成できます。
s のGridLayout
代わりにa を使用することもできます。JInternalFrame
于 2013-09-13T04:59:37.330 に答える