jpanel的一些事

1. 最近在用java swing做界面程序,通过在jframe里面add不同的jpanel来实现界面的切换。实现的方法是frame.removeAll(); frame.add(new subpanel()); 做的时候在想这样之前remove掉的panel的内存是不是释放掉了。于是,打开任务管理器发现,随着不断地切换界面,内存占用在不断增加。然后就到网上查看,发现有人也有这样的疑问,但是有一条回答说虚拟机的垃圾回收会在一段时间之后回收不用的资源。过了一会,又打开任务管理器发现内存果然变小了。第一次见识到gc的威力,也消除了我一个疑问。

随后在国外的网站上查了一些资料,对jpanel有了更深的了解。

2. Q:为什么jpanel不需要dispose()方法而jdialog需要

A:因为jdialog有一个本地的“映射”(native peer),某个与本地操作系统相关的窗口控件。而这个peer是在虚拟机之外的所以垃圾回收无法对它奏效,我们必须自己来。而jpanel就没有本地“映射”了,只要把它的引用设为null就可以实现自动回收。

详见:http://www.coderanch.com/t/341023/GUI/java/destroying-JPanel

3. Q:如何把一个jpanel上面的所有控件设置为统一的字体(注意,因为jpanel上面可能还有数层jpanel,所以需要递归)。

A:public static final void setJPanelFont(JPanel aPanel, Font font)

 {    

    Component c = null;    

    Component[] components = aPanel.getComponents();     

    aPanel.setFont(font);    

    if(components != null)    

    {        

           int numComponents = components.length;        

           for(int i = 0; i < numComponents; i++)        

           {            

                c = components[i];             

                if(c != null)            

               {                

                     if(c instanceof JPanel)                                 

                        setJPanelFont((JPanel)c,font);                

                     else                

                        c.setFont(font);                 

              }        

          }    

    }

}  

### JPanel 的基本概念 JPanel 是 Java Swing 中的一个轻量级容器组件,位于 `javax.swing` 包下[^1]。此类提供了一个通用的空间来放置其他组件,如 JButton、JTextArea 或 JTextField 等,并支持嵌套功能以便更复杂界面的设计[^3]。 ### 创建与初始化 JPanel 实例 创建一个新的 JPanel 对象非常简单: ```java JPanel panel = new JPanel(); ``` 此构造函数会自动应用默认布局管理器 FlowLayout[^2]。如果希望自定义布局,则可以在实例化时指定不同的 LayoutManager 类型,如下所示: ```java // 设置居中流式布局 JPanel panel03 = new JPanel(new FlowLayout(FlowLayout.CENTER)); ``` ### 添加子组件至 JPanel 通过调用 add 方法可向面板添加各种类型的 UI 控件: ```java panel.add(new JLabel("这是一个标签")); panel.add(new JButton("点击按钮")); ``` 这些控件将会按照当前设定好的布局方式排列显示出来。 ### 自定义外观属性 除了容纳其它部件外,还可以调整 JPanel 的视觉特性,例如改变边框样式或者填充颜色等: ```java // 设定背景色为浅灰色 panel.setBackground(Color.LIGHT_GRAY); // 应用 TitledBorder 边缘装饰 Border border = BorderFactory.createTitledBorder("分组标题"); panel.setBorder(border); ``` 以上操作使得开发者能够灵活定制用户交互体验的同时保持良好的代码结构。 ### 将 JPanel 放入顶层容器 通常情况下,完成上述配置之后还需要把整个面板加入到更高层次的窗口框架里去展示给最终使用者查看: ```java frame.getContentPane().add(panel); // 假设 frame 已经被声明并初始化好了 ``` 这一步骤确保了所有内部元素都能正常渲染于屏幕上形成完整的图形界面应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值