- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要创建一个自定义 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/
我对用于实现 addLayoutComponent() 的当前 API 的逻辑有点困惑. 有两种方法,一种采用字符串和组件,另一种采用对象和组件(但在运行时失败,除非该对象是字符串。) 不过,弃用的是
我需要创建一个自定义 LayoutManager 以供 JPanel 使用。 但是,当我将组件添加到 JPanel 时,JPanel 不会调用我的自定义 LayoutManager 的 addLayo
我是一名优秀的程序员,十分优秀!