Java jPanel未出现在jLayeredPane内
我已经阅读了关于这个问题的所有主题,但我不知道问题出在哪里 下面的代码在一个方法中,该方法在单击按钮时被调用,按钮是动态生成的,控制台输出显示为yes,因此该方法被调用Java jPanel未出现在jLayeredPane内,java,swing,dynamic,jpanel,jlayeredpane,Java,Swing,Dynamic,Jpanel,Jlayeredpane,我已经阅读了关于这个问题的所有主题,但我不知道问题出在哪里 下面的代码在一个方法中,该方法在单击按钮时被调用,按钮是动态生成的,控制台输出显示为yes,因此该方法被调用 System.out.println("loaditems method"); final JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(436, 480)); panel.setLayout(new Flow
System.out.println("loaditems method");
final JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(436, 480));
panel.setLayout(new FlowLayout(FlowLayout.LEFT,5,5));
panel.setBackground(Color.gray);
panel.setBorder(BorderFactory.createEtchedBorder(LOWERED, Color.lightGray, Color.gray));
panel.setOpaque(false);
panel.setLocation(jMainPanel.getLocation());
panel.setVisible(true);
jLayeredPane1.add(panel);
jLayeredPane1.revalidate();
JLayeredPane
默认情况下使用空布局。因此,您应该实现自己的LayoutManager
来设置JLayeredPane
中每个组件的边界
请参见此示例:
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestJLayeredPane {
public static class AbsoluteLayoutManager implements LayoutManager {
private Map<Component, Rectangle> bounds = new LinkedHashMap<Component, Rectangle>();
@Override
public void addLayoutComponent(String name, Component comp) {
bounds.put(comp, new Rectangle(comp.getPreferredSize()));
}
@Override
public void removeLayoutComponent(Component comp) {
bounds.remove(comp);
}
@Override
public Dimension preferredLayoutSize(Container parent) {
Rectangle rect = new Rectangle();
for (Rectangle r : bounds.values()) {
rect = rect.union(r);
}
return rect.getSize();
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return preferredLayoutSize(parent);
}
@Override
public void layoutContainer(Container parent) {
for (Entry<Component, Rectangle> e : bounds.entrySet()) {
e.getKey().setBounds(e.getValue());
}
}
public void setBounds(Component c, Rectangle bounds) {
this.bounds.put(c, bounds);
}
}
protected void initUI() {
JFrame frame = new JFrame("test");
AbsoluteLayoutManager layout = new AbsoluteLayoutManager();
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setLayout(layout);
final JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
panel.setBackground(Color.gray);
panel.setVisible(true);
layeredPane.add(panel);
layout.setBounds(panel, new Rectangle(17, 59, 436, 480));
frame.add(layeredPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestJLayeredPane().initUI();
}
});
}
}
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Container;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.LayoutManager;
导入java.awt.Rectangle;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入java.util.Map.Entry;
导入javax.swing.JFrame;
导入javax.swing.JLayeredPane;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类TestJLayeredPane{
公共静态类AbsoluteLayoutManager实现LayoutManager{
私有映射边界=新LinkedHashMap();
@凌驾
public void addLayoutComponent(字符串名称,组件组成){
put(comp,新矩形(comp.getPreferredSize());
}
@凌驾
公共void removeLayoutComponent(组件组件组件){
边界。移除(comp);
}
@凌驾
公共维度preferredLayoutSize(容器父级){
矩形rect=新矩形();
对于(矩形r:bounds.values()){
矩形=矩形并集(r);
}
返回rect.getSize();
}
@凌驾
公共维度minimumLayoutSize(容器父级){
返回preferredLayoutSize(父级);
}
@凌驾
公共无效布局容器(容器父级){
对于(条目e:bounds.entrySet()){
e、 getKey().setBounds(如getValue());
}
}
公共空心立根(构件c,矩形边界){
this.bounds.put(c,bounds);
}
}
受保护的void initUI(){
JFrame=新JFrame(“测试”);
AbsoluteLayoutManager布局=新建AbsoluteLayoutManager();
JLayeredPane layeredPane=新的JLayeredPane();
layeredPane.setLayout(布局);
最终JPanel面板=新JPanel();
panel.setLayout(新的FlowLayout(FlowLayout.LEFT,5,5));
面板.立根背景(颜色.灰色);
面板设置可见(真);
layeredPane.add(面板);
布局.立根(面板,新矩形(17,59,436,480));
frame.add(分层窗格);
frame.pack();
frame.setVisible(true);
}
publicstaticvoidmain(字符串[]args)抛出ClassNotFoundException、InstantiationException、IllegalAccessException、,
不受支持的LookandFeelException{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的TestJLayeredPane().initUI();
}
});
}
}
JLayeredPane
默认情况下使用空布局。因此,您应该实现自己的LayoutManager
来设置JLayeredPane
中每个组件的边界
请参见此示例:
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestJLayeredPane {
public static class AbsoluteLayoutManager implements LayoutManager {
private Map<Component, Rectangle> bounds = new LinkedHashMap<Component, Rectangle>();
@Override
public void addLayoutComponent(String name, Component comp) {
bounds.put(comp, new Rectangle(comp.getPreferredSize()));
}
@Override
public void removeLayoutComponent(Component comp) {
bounds.remove(comp);
}
@Override
public Dimension preferredLayoutSize(Container parent) {
Rectangle rect = new Rectangle();
for (Rectangle r : bounds.values()) {
rect = rect.union(r);
}
return rect.getSize();
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return preferredLayoutSize(parent);
}
@Override
public void layoutContainer(Container parent) {
for (Entry<Component, Rectangle> e : bounds.entrySet()) {
e.getKey().setBounds(e.getValue());
}
}
public void setBounds(Component c, Rectangle bounds) {
this.bounds.put(c, bounds);
}
}
protected void initUI() {
JFrame frame = new JFrame("test");
AbsoluteLayoutManager layout = new AbsoluteLayoutManager();
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setLayout(layout);
final JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
panel.setBackground(Color.gray);
panel.setVisible(true);
layeredPane.add(panel);
layout.setBounds(panel, new Rectangle(17, 59, 436, 480));
frame.add(layeredPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
UnsupportedLookAndFeelException {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TestJLayeredPane().initUI();
}
});
}
}
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Container;
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.LayoutManager;
导入java.awt.Rectangle;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入java.util.Map.Entry;
导入javax.swing.JFrame;
导入javax.swing.JLayeredPane;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公共类TestJLayeredPane{
公共静态类AbsoluteLayoutManager实现LayoutManager{
私有映射边界=新LinkedHashMap();
@凌驾
public void addLayoutComponent(字符串名称,组件组成){
put(comp,新矩形(comp.getPreferredSize());
}
@凌驾
公共void removeLayoutComponent(组件组件组件){
边界。移除(comp);
}
@凌驾
公共维度preferredLayoutSize(容器父级){
矩形rect=新矩形();
对于(矩形r:bounds.values()){
矩形=矩形并集(r);
}
返回rect.getSize();
}
@凌驾
公共维度minimumLayoutSize(容器父级){
返回preferredLayoutSize(父级);
}
@凌驾
公共无效布局容器(容器父级){
对于(条目e:bounds.entrySet()){
e、 getKey().setBounds(如getValue());
}
}
公共空心立根(构件c,矩形边界){
this.bounds.put(c,bounds);
}
}
受保护的void initUI(){
JFrame=新JFrame(“测试”);
AbsoluteLayoutManager布局=新建AbsoluteLayoutManager();
JLayeredPane layeredPane=新的JLayeredPane();
layeredPane.setLayout(布局);
最终JPanel面板=新JPanel();
panel.setLayout(新的FlowLayout(FlowLayout.LEFT,5,5));
面板.立根背景(颜色.灰色);
面板设置可见(真);
layeredPane.add(面板);
布局.立根(面板,新矩形(17,59,436,480));
frame.add(分层窗格);
frame.pack();
frame.setVisible(true);
}
publicstaticvoidmain(字符串[]args)抛出ClassNotFoundException、InstantiationException、IllegalAccessException、,
不受支持的LookandFeelException{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
s