java swing panel问题_java swing中JPanel的布局问题

在Java Swing应用中,使用BorderLayout管理器布局时,遇到JPanel在WEST位置可以正常显示Label和Button,但加入JDesktopPane>InternalFrame却无法显示的问题。经过讨论,原因可能是JDesktopPane设置了过小的bounds,或者布局管理器的设置不正确。解决方案包括调整bounds尺寸,确保JDesktopPane可见,或者检查容器的布局管理器设置,如设置FlowLayout时可能需要调整间距参数。
摘要由CSDN通过智能技术生成

java swing中JPanel的布局问题

关注:92  答案:3  mip版

解决时间 2021-01-17 16:07

e6cb1a03ad541b3098697807b7bf1798.png

提问者侢遇噹姩揂

2021-01-17 09:36

我在frame中分别布局了五个面板,让其显示在borderlayout管理器东西南北中的不同位置,问题是:west的面板中加入label、button能实现出来。但是加入JDesktopPane>InternalFrame进去就不能显示,其他部位显示正常,求高手指教一二

//放入这段代码能显示面板

JPanel Panel_1=new JPanel(new BorderLayout());//2013.4.12

add(BorderLayout.WEST,Panel_1);

JButton btn_1 = new JButton();

Panel_1.add(BorderLayout.NORTH,btn_1);

//放入这段代码不能显示

最佳答案

e6cb1a03ad541b3098697807b7bf1798.png

二级知识专家清欢话寂寥

2021-01-17 11:01

贴码吧,不然怎么分析

desktopPane_1.setBounds(0, 0, 1, 1);你这尺寸在1个像素,肉眼看不到啊。

//

还是你设置的bounds问题,之所以放center能显示,是因为center里面会自适应大小

全部回答

e6cb1a03ad541b3098697807b7bf1798.png

1楼孤者何懼

2021-01-17 13:59

1.布局首先要理清思路,那一个组件放在哪个组件里面,就如你的代码他们分别是 jframe f中放置了jpanel center,而jpanel center中又放置了5个testpanel[] t = new testpanel[5];

也就是说,你的5个test_shu对象的位置由center容器的布局方式决定即你的代码22行处 private jpanel center = new jpanel(new flowlayout());

这个布局方式决定,所以,而flowlayout的布局方式的默认值是:

流式布局管理器把容器看成一个行集,好象平时在一张纸上写字一样,一行写满就换下一行。行高是用一行中的控件高度决定的。flowlayout是所有 japplet/japplet的默认布局。在生成流式布局时能够指定显示的对齐方式,默认情况下是居中(flowlayout.center)

flowlayout() //生成一个默认的流式布局,组件在容器里居中,每个组件之间留下5个像素的距离.

flowlayout(int alinment) //可以设定每行组件的对齐方式.

flowlayout(int alignment,int horz,int vert) //设定对齐方式并设定组件水平和垂直的距离.

当容器的大小发生变化时,用flowlayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化.

所以要达到你的效果,只需要将

22行处的代码改成如下设置就可以了:

private jpanel center = new jpanel(new flowlayout(flowlayout.center, 0, 0));

e6cb1a03ad541b3098697807b7bf1798.png

2楼看厌了山川

2021-01-17 12:21

贴出你的代码,帮你找找。

-------------------------------------------------------

你给出的代码,有几个PANEL不知道是怎么来的,我稍改动了一下,你看看,

现在是显示出来了。

import java.awt.BorderLayout;

import javax.swing.JButton;

import javax.swing.JDesktopPane;

import javax.swing.JFrame;

import javax.swing.JInternalFrame;

import javax.swing.JScrollPane;

public class App extends JFrame {

public App() {

// 加入这这段注释代码不能显示

JDesktopPane desktopPane_1 = new JDesktopPane();

desktopPane_1.setBounds(0, 0, 1, 1);

add(BorderLayout.CENTER, desktopPane_1);

JInternalFrame internalFrame_1 = new JInternalFrame(

"New JInternalFrame");

internalFrame_1.setSize(400, 300);

desktopPane_1.add(internalFrame_1);

JScrollPane scrollPane_1 = new JScrollPane();

internalFrame_1.getContentPane().add(scrollPane_1, BorderLayout.CENTER);

internalFrame_1.setVisible(true);

JButton btn_1 = new JButton("OK");

add(BorderLayout.NORTH, btn_1);

setSize(600, 400);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String[] args) {

new App();

}

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

点此我要举报以上信息!

推荐资讯

大家都在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值