我的ContentPane
包含多个JPanels
,其中包含JTabbedPanes
和其他内容。当用户缩小或扩展窗口时,如何使这些JPanel更改其大小。有没有办法设置百分比大小?
JPanel panelOne = new JPanel;
panelOne.setSize( // % of );
答案 0 :(得分:3)
您可以在ContentPanes上使用各种布局方法。对于基于相对于画布的大小进行缩放的内容,您可以尝试使用SpringLayout并定义与内容窗格本身相关的边框。其他元素可以约束到该锚定元素或内容窗格。
您可以使用约束来基于ContentPane或其他元素拉伸面板。
您可以使用WindowBuilder为Eclipse可视化地规划SpringLayout(以及其他可能的布局,例如Mig,Grid等)。根据您的布局的大小和比例,您可能会发现其他布局更符合您的要求或偏好。
答案 1 :(得分:3)
使用适当的布局管理器,这就是它们的用途。他们负责监视监视父容器更改所涉及的所有脏工作,并根据更改计算所需的设置。
查看Laying Out Components Within a Container
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
public class TestSizableComponents {
public static void main(String[] args) {
new TestSizableComponents();
}
public TestSizableComponents() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JTabbedPane tabbedPane = new JTabbedPane();
for (int index = 0; index < 10; index++) {
tabbedPane.add(Integer.toString(index), new TabPane(Integer.toString(index)));
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new HeaderPane(), BorderLayout.NORTH);
frame.add(tabbedPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class HeaderPane extends JPanel {
public HeaderPane() {
setLayout(new GridBagLayout());
add(new JLabel("Look ma, no hands"));
setBorder(new CompoundBorder(new LineBorder(Color.RED), new EmptyBorder(10, 10, 10, 10)));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 100);
}
}
public class TabPane extends JPanel {
public TabPane(String name) {
setLayout(new GridBagLayout());
add(new JLabel(name));
setBorder(new EmptyBorder(10, 10, 10, 10));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}