如何设置两个组件垂直在一个JPanel与固定大小的上部组件?



具体要求如下:

  • 一个固定大小的图像在JPanel
  • 根据不同的输入,提示JLabel显示或隐藏在图像
  • 下面当没有提示标签显示时,
  • 面板的大小应该与图像相同。

下面是示例代码:

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container panel = frame.getContentPane();
BorderLayout boxLayout = new BorderLayout();
panel.setLayout(boxLayout);
JLabel fixedLabel = new JLabel("fixed");
fixedLabel.setBackground(Color.green);
fixedLabel.setOpaque(true);
fixedLabel.setMinimumSize(new Dimension(600, 120));
fixedLabel.setPreferredSize(new Dimension(600, 120));
fixedLabel.setMaximumSize(new Dimension(600, 120));
panel.add(fixedLabel, BorderLayout.NORTH);
JLabel lbl = new JLabel("can be hidden");
fixedLabel.addMouseListener(new MouseListener() {
boolean showButton = false;
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if (!showButton) {
showButton = true;
panel.add(lbl, BorderLayout.CENTER);
panel.revalidate();
panel.repaint();
} else {
showButton = false;
panel.remove(lbl);
panel.revalidate();
panel.repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
frame.pack();
frame.setVisible(true);

第一次点击时,面板不会自动垂直放大。手动放大后,再次点击,面板不会自动缩小到顶部标签大小

请指导我如何进行。

我用下面的代码解决了这个问题

panel.addContainerListener(new ContainerListener() {
@Override
public void componentAdded(ContainerEvent e) {
System.out.println("added");
System.out.println(panel.getBounds());
Rectangle bounds = frame.getBounds();
bounds.height +=38;
frame.setBounds(bounds);
frame.revalidate();
frame.repaint();
System.out.println(frame.getBounds());
}
@Override
public void componentRemoved(ContainerEvent e) {
System.out.println("removed");
System.out.println(panel.getBounds());
Rectangle bounds = frame.getBounds();
bounds.height -= 38;
frame.setBounds(bounds);
frame.revalidate();
frame.repaint();
System.out.println(frame.getBounds());
}
});

相关内容

  • 没有找到相关文章

最新更新