无法调整 JInternalFrame 的大小
Couldn't Resize JInternalFrame
我在 JDesktopPane
中添加了 JTree
和一个 JInternalFrame
。
我想调整 JInternalFrame
的大小,但做不到 it.But 我可以在其中移动内部框架。
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.OverlayLayout;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class TableDiff {
public static void main(String[] args) {
JDesktopPane panel = new JDesktopPane() {
// @Override
// public boolean isOptimizedDrawingEnabled() {
// return false;
// }
};
panel.setLayout(new OverlayLayout(panel));
JTree tree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
for (int i = 0; i < 10; i++) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(i + "x");
for (int j = 0; j < 5; j++) {
node.add(new DefaultMutableTreeNode(i + "x"));
}
root.add(node);
}
tree.setModel(new DefaultTreeModel(root));
JScrollPane tscrollpane = new JScrollPane(tree);
JInternalFrame iFrame = new JInternalFrame("asd");
iFrame.setClosable(true);
iFrame.setMaximizable(true);
iFrame.setResizable(true);
iFrame.setIconifiable(true);
iFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
// tscrollpane.setAlignmentX(1.0f);
// tscrollpane.setAlignmentY(0.0f);
// iFrame.setAlignmentX(0.0f);
// iFrame.setAlignmentY(0.0f);
panel.add(tscrollpane);
panel.add(iFrame);
iFrame.setVisible(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
}
您的问题是 OverlayLayout
的使用。
只需删除以下行:
panel.setLayout(new OverlayLayout(panel));
此外,非常重要的是,不要忘记设置 JFrame
和 JInternalFrame
的首选尺寸!
根据 Oracle documentation for using Internal Frames with Java Swing (link):
You must set the size of the internal frame.
If you do not set the
size of the internal frame, it will have zero size and thus never be
visible. You can set the size using one of the following methods:
setSize
, pack
, or setBounds
.
我在 JDesktopPane
中添加了 JTree
和一个 JInternalFrame
。
我想调整 JInternalFrame
的大小,但做不到 it.But 我可以在其中移动内部框架。
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.OverlayLayout;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class TableDiff {
public static void main(String[] args) {
JDesktopPane panel = new JDesktopPane() {
// @Override
// public boolean isOptimizedDrawingEnabled() {
// return false;
// }
};
panel.setLayout(new OverlayLayout(panel));
JTree tree = new JTree();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
for (int i = 0; i < 10; i++) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(i + "x");
for (int j = 0; j < 5; j++) {
node.add(new DefaultMutableTreeNode(i + "x"));
}
root.add(node);
}
tree.setModel(new DefaultTreeModel(root));
JScrollPane tscrollpane = new JScrollPane(tree);
JInternalFrame iFrame = new JInternalFrame("asd");
iFrame.setClosable(true);
iFrame.setMaximizable(true);
iFrame.setResizable(true);
iFrame.setIconifiable(true);
iFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
// tscrollpane.setAlignmentX(1.0f);
// tscrollpane.setAlignmentY(0.0f);
// iFrame.setAlignmentX(0.0f);
// iFrame.setAlignmentY(0.0f);
panel.add(tscrollpane);
panel.add(iFrame);
iFrame.setVisible(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
}
您的问题是 OverlayLayout
的使用。
只需删除以下行:
panel.setLayout(new OverlayLayout(panel));
此外,非常重要的是,不要忘记设置 JFrame
和 JInternalFrame
的首选尺寸!
根据 Oracle documentation for using Internal Frames with Java Swing (link):
You must set the size of the internal frame.
If you do not set the size of the internal frame, it will have zero size and thus never be visible. You can set the size using one of the following methods:setSize
,pack
, orsetBounds
.