Мне нужно создать пользовательский LayoutManager для использования с JPanel.
Однако, когда я добавляю Компонент в JPanel, JPanel не вызывает метод addLayoutComponent () моего пользовательского LayoutManager, даже если он должен:
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");
}
}
}