我有一个中央小组。这是我的父母小组。我在父面板中添加了3个面板。
面板将垂直堆叠。像标题面板,然后是中间面板,然后是底部面板。我只想专注于我的标题面板。当我使用文本创建jlabel时。标签显示,面板边框拉伸父面板的整个宽度,这就是我想要的。
private JPanel titlePanel() {
String text = "<html><b><big><font color=#5C8C5C>Help Dialog</font></big></b></html>";
JLabel textLabel = new JLabel(text, JLabel.CENTER);
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.LINE_AXIS));
p.add(textLabel);
p.setBorder(BorderFactory.createLineBorder(Color.black));
return p;
}
我实际上想要使用图标作为标签而不是html文本。因此,请对代码进行更改。
private JPanel titlePanel() {
Registry appReg = Registry.getRegistry(this);
ImageIcon ediLabelIcon = appReg.getImageIcon("ToolLabel.ICON");
JLabel textLabel = new JLabel(ediLabelIcon, JLabel.CENTER);
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.LINE_AXIS));
p.add(textLabel);
p.setBorder(BorderFactory.createLineBorder(Color.black));
return p;
}
现在标签显示,但面板的边框仅与标签一样宽,并且没有伸出父面板的宽度。
我试图将面板边框扩展为父面板的宽度,而不仅仅是标签的宽度。这是父面板的代码。
private void createDialog() {
Component titlePanel = titlePanel();
Component verbiagePanel = verbiagePanel();
Component closeButtonPanel = closeButton();
setTitle("HELP Dialog");
centerPanel = new JPanel();
centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
centerPanel.setPreferredSize(new Dimension(600, 300));
centerPanel.add(titlePanel);
centerPanel.add(Box.createRigidArea(new Dimension(0, 10)));
centerPanel.add(verbiagePanel);
centerPanel.add(Box.createHorizontalGlue());
centerPanel.add(Box.createRigidArea(new Dimension(0, 10)));
centerPanel.add(closeButtonPanel);
getContentPane().add(centerPanel);
this.pack();
}
答案 0 :(得分:1)
在JLabel文本中使用HTML切换了计算JLabel的首选大小的机制。 现在我无法详细解释它,但如果你改变创建标题标签
JLabel textLabel = new JLabel("<html></html>", ediLabelIcon, JLabel.CENTER);
您的标签将延伸到父面板宽度。
或者您可以选择其他布局管理器,例如GridBagLayout。使用GridBagLayout,您可以强制将任何组件拉伸到其父宽度。