添加jlabel组件后的jpanel大小

2019年6月5日 16点热度 0条评论

我有一个中央面板。这是我的父面板。我将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();

}

解决方案如下:

在JLabel文本中使用HTML会切换用于计算JLabel首选大小的机制。
现在,我无法详细解释,但是如果您将创建标题标签更改为

JLabel textLabel = new JLabel("<html></html>", ediLabelIcon, JLabel.CENTER);

您的标签将被拉伸到父面板的宽度。

或者,您可以选择另一个布局管理器,例如GridBagLayout。使用GridBagLayout,您可以强制将任何组件拉伸到其父级宽度。