【发布时间】:2018-06-20 08:48:53
【问题描述】:
每个人。我想在 GridLayout 中有自定义 JPanel(我更喜欢使用绝对位置布局)。 GridLayout 在 ScrollPane 中。
public class App extends JFrame {
public App() {
super("bamlOperator");
JPanel panel = new JPanel(new GridLayout(0, 1));
JScrollPane scrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
panel.add(new MyCustomPanel());
panel.add(new MyCustomPanel());
panel.add(new MyCustomPanel());
panel.add(new MyCustomPanel());
panel.add(new MyCustomPanel());
panel.add(new MyCustomPanel());
pack();
setVisible(true);
}
public static void main(String[] args) {
new App();
}
}
还有我的面板:
public class MyCustomPanel extends JPanel {
private JLabel aaa = new JLabel("aaa:");
private JLabel bbb = new JLabel("bbb");
private JLabel ccc = new JLabel("ccc:");
public MyCustomPanel() {
setPreferredSize(new Dimension(100,100));
JPanel amlPanel = new JPanel();
amlPanel.setLayout(null);
amlPanel.setBounds(0,0,100,100);
aaa.setBounds(10,20,30,40);
amlPanel.add(aaa);
bbb.setBounds(20,30,40,50);
amlPanel.add(bbb);
ccc.setBounds(30,40,50,60);
amlPanel.add(ccc);
add(amlPanel);
}
}
但它不起作用。
我说,我更喜欢绝对位置布局,但我知道这是不好的做法。我可以使用另一个,但我需要这样的 JPanel:
JPanel 项目
【问题讨论】:
-
“但它不起作用。” 不是对问题的描述。请描述您正在经历什么以及您期待什么。
-
new MyCosutomPanel() 是否意味着 new AMLPanel() ?
-
@Gimhani 没错,我已经改进了。
-
@Ben 这确实意味着:我有 GridLayout 的空白框架。
-
所以,您的根本问题是您将绝对布局与布局管理器混合在一起 - 问题是
MyCustomPanel没有提供任何尺寸提示,布局管理器可以使用这些提示来更好地决定如何最好布局你的组件。因此,如果您真的想使用绝对布局,您将不得不完成布局管理 API 为您完成的所有工作
标签: java swing layout-manager grid-layout