gpt4 book ai didi

java - JPanel 不调用自定义 LayoutManager 的 addLayoutComponent()

转载 作者:行者123 更新时间:2023-12-04 03:10:18 25 4
gpt4 key购买 nike

我需要创建一个自定义 LayoutManager 以供 JPanel 使用。

但是,当我将组件添加到 JPanel 时,JPanel 不会调用我的自定义 LayoutManager 的 addLayoutComponent() 方法,即使它应该:
http://download.oracle.com/javase/tutorial/uiswing/layout/custom.html

(它确实调用了 layoutContainer(),如预期的那样)

希望有人能告诉我我做错了什么。
如何让 JPanel 调用 addLayoutComponent()?

import java.awt.*;
import javax.swing.*;

public class Test
{
public static void main(String[] args)
{
createAndShowGUI();
}



private static void createAndShowGUI()
{
JButton button = new JButton("Test");
button.setBounds(64, 64, 128, 64);

JPanel panel = new JPanel(new CustomLayoutManager());

//FIXME: Missing call to CustomLayoutManager.addLayoutComponent()
panel.add(button);

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(640, 480);
frame.add(panel);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.toFront();
}



public static class CustomLayoutManager implements LayoutManager
{
public void addLayoutComponent(String name, Component comp)
{
System.out.println("addLayoutComponent");
}

public void layoutContainer(Container parent)
{
System.out.println("layoutContainer");
}

public Dimension minimumLayoutSize(Container parent)
{
System.out.println("minimumLayoutSize");
return new Dimension();
}

public Dimension preferredLayoutSize(Container parent)
{
System.out.println("preferredLayoutSize");
return new Dimension();
}

public void removeLayoutComponent(Component comp)
{
System.out.println("removeLayoutComponent");
}
}
}

最佳答案

How do I get the JPanel to call addLayoutComponent()?

它只会在你的布局管理器使用约束时调用这个方法

panel.add(button);  

尝试:

panel.add("some constraint value", button);  

此方法旨在用于将约束传递给布局管理器。我认为 BorderLayout 是唯一可能使用过它的布局管理器。但是,通常不应再使用它。相反,LayoutManager2 使用:

public void addLayoutComponent(Component component, Object constraint)

它允许您将任何对象作为约束传递。

关于java - JPanel 不调用自定义 LayoutManager 的 addLayoutComponent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com