【发布时间】:2015-02-15 06:52:22
【问题描述】:
我有一个包含主面板的框架。最后一个将动态添加其他命令面板(每个都包含一个按钮和一个文本字段)。问题是即使 mainPanel 已满,JScrollPane 似乎也不允许我使用看不见的 commandPanels。 下图是我的情况。
为了初始化窗口,我写了下面的代码:
frame = new JFrame();
frame.setBounds(100, 100, 962, 639);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
mainPanel = new JPanel();
mainPanel.setBounds(264, 6, 692, 500);
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
scroll = new JScrollPane();
scroll.getViewport().add(mainPanel);
frame.getContentPane().add(scroll);
动态添加新commandPanels的方法是:
public void loadCommandPanel(String commandName)
{
CommandPanel newCommandPanel = new CommandPanel();
newCommandPanel.getCommandBtn().setText(commandName);
mainPanel.add(newCommandPanel);
scroll.getViewport().add( newCommandPanel );
mainPanel.add( scroll, BorderLayout.EAST);
frame.add( mainPanel);
...
}
对于获取 scrollPane 的任何帮助,我们将不胜感激。
【问题讨论】:
-
我建议避免使用
null布局和setBounds方法的用户。试试看它是否有效。另外,为什么要将面板添加到视口,而不是使用scroll = new JScrollPane(mainPanel);? -
1) Java GUI 必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them 以及white space 的布局填充和边框。 2) 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、自包含、正确示例)。
-
"(每个都包含一个按钮和一个文本字段)" 考虑改为使用
JList来保存具有label和command的对象的实例属性。使用渲染器在JLabel中显示label,在JTextField中显示command.. -
或使用
JList或JTable...
标签: java swing jpanel jscrollpane layout-manager