核心Swing组件(七)

摘要:
JPanel组件可以用作一般用途的窗口对象,代替AWT面板窗口。当我们需要一个可绘制的Swing组件区域时,JPanel会替换Canvas组件。JPanelpanel=newJPanel();JButtonokButton=newJButton;panel.add;JButtoncancelButton=newJButton;panel.add;当我们需要创建一个新组件时,我们派生JPanel并重写publicvoidpaintComponent方法。JPanelUIResource元素属性字符串对象类型Panel.backgroundColorPanel.borderBorderPanel。fontFontPanel(字体面板)。foregroundColorPanelUIString4.8摘要在本章中,我们讨论所有Swing组件的基类:JComponent类。同时,我们学习了如何使用Icon接口和ImageIcon类向组件添加图标,而GrayFilter图像过滤器用于禁用图标。最后,我们了解了JPanel作为一个基本的Swing容器对象。
4.7 JPanel类

最后一个基本的Swing组件是JPanel组件。JPanel组件可以作为一个通常目的的窗口对象,替换了AWT的Panel窗口,而当我们需要一个可绘制的Swing组件区域时,JPanel替换了Canvas组件。

4.7.1 创建JPanel

JPanel有四个构造函数:

public JPanel()
JPanel panel = new JPanel();
 
public JPanel(boolean isDoubleBuffered)
JPanel panel = new JPanel(false);
 
public JPanel(LayoutManager manager)
JPanel panel = new JPanel(new GridLayout(2,2));
 
public JPanel(LayoutManager manager, boolean isDoubleBuffered)
JPanel panel = new JPanel(new GridLayout(2,2), false);

使用这些构造函数,我们可以修改FlowLayout中的默认布局管理器,或是通过执行true或false修改默认的双缓冲。

4.7.2 使用JPanel

我们可以将JPanel用我们通常目的的容器,或者是用作新组件的基类。对于通常目的容器,其过程很简单:创建面析,如果需要设置其布局管理器,并且使用add()方法添加组件。

JPanel panel = new JPanel();
JButton okButton = new JButton("OK");
panel.add(okButton);
JButton cancelButton = new JButton("Cancel");
panel.add(cancelButton);

当我们需要创建一个新的组件时,派生JPanel并且重写public void paintComponent(Graphics g)方法。尽管我们可以直接派生JComponent,但派生JPanel修改更为合理。列表4-8演示了一个组件绘制适应组件尺寸的椭圆的简单组件,同时包含一个测试驱动。

package swingstudy.ch04;
 
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.GridLayout;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class OvalPanel extends JPanel {
 
	Color color;
 
	public OvalPanel() {
		this(Color.black);
	}
 
	public OvalPanel(Color color) {
		this.color = color;
	}
 
	public void paintComponent(Graphics g) {
		int width = getWidth();
		int height = getHeight();
		g.setColor(color);
		g.drawOval(0, 0, width, height);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		Runnable runner = new Runnable() {
			public void run() {
				JFrame frame = new JFrame("Oval Sample");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
				frame.setLayout(new GridLayout(2,2));
 
				Color colors[] = {Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW };
 
				for (int i=0;i<4;i++) {
					OvalPanel panel = new OvalPanel(colors[i]);
					frame.add(panel);
				}
 
				frame.setSize(300, 200);
				frame.setVisible(true);
			}
		};
 
		EventQueue.invokeLater(runner);
	}
 
}

图4-15显示了测试驱动的运行结果。

Swing_4_15

4.7.3 自定义JPanel观感

表4-16显示了JPanelUIResource相关的属性集合。对于JPanel组件,有五个不同的属性。这些设置也许会影响到面板内的组件。

JPanel UIResource元素

属性字符串

对象类型

Panel.background

Color

Panel.border

Border

Panel.font

Font

Panel.foreground

Color

PanelUI

String

4.8 小结

在本章中,我们探讨了所有Swing组件的基类:JComponent类。由讨论我们了解了所有组件的共同元素,例如工具提示,以及特定的组件,例如JLabel。同时我们了解了如何使用Icon接口以及ImageIcon类为组件添加图标,而GrayFilter图像过滤器用于禁止图标。

我们同时了解了AbstractButton组件,他是所有Swing按钮对象的根对象。我们了解了其数据模型接口,ButtonModel,以及这个接口的默认实现,DefalutButtonModel。接着,我们了解了JButton类,他是最简单的AbstractButton实现。最后,我们了解了作为基本Swing容器对象的JPanel。

在第5章中,我们将会深入一些复杂的AbstractButton实现:转换按钮。

免责声明:文章转载自《核心Swing组件(七)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGis 中空间数据的插入与更新thinkphp导出csv文件,用表格输出excel下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Swing UI

基于JAVA Swing实现的自定义组件可折叠的JPanel组件 基本思想: 可折叠面板,分为两个部分-头部面板与内容面板 头部面板– 显示标题,以及对应的icon图标,监听鼠标事件决定内容面板隐藏或者显示 内容面板– 普通的JPanel组件。 实现: 头部面板: package com.gloomyfish.ui.demo; import java....

在Eclipse中使用WindowBuilder设计Swing程序

在Eclipse中使用WindowBuilder设计Swing程序     Swing程序表示Java的客户端窗体程序,除了通过手动编写代码的方式设计Swing程序之外,Eclipse中还提供了一种WindowBuilder工具,该工具是一种非常好用的Swing可视化开发工具,有了它,开发人员就可以像Visual Studio一样通过拖放组件的方式编...

Java Swing编程之仿js树状折叠菜单

最近要完成一个需求:用swing做个树状菜单,含二级菜单,点击一级菜单展开二级菜单,且二级菜单数目超过预览视图会出现滚动条。由于swing研究的少,花了不少精力! 先看下测试效果图: 收起图: 展开图: 完整源码: 1 package com.xuwei.test2; 2 3 import java.awt.BorderLayout;...

swing界面刷新问题

在Java Swing编程中,往往会遇到需要动态刷新界面的时候,例如动态刷新JLabel的文本,JTextField里的文本等等。但是往往却没有达到我们预期的效果,我相信很多朋友都遇到过本文将要说的这个问题。 如下图的Swing界面中,我们期望在点击按钮时,Jlabel和JTextField里的文本能不断的变化,并实时地显示出来。 这个例子中,我们期望点...

核心Swing组件(六)

4.6 JButton类 JButton组件是可以被选中的最基本的AbstractButton组件。他支持文本,图像以及基于HTML的标签,如图4-12所示。 4.6.1 创建JButton JButton类具有5个构造函数: public JButton() JButton button = new JButton(); public JButto...

谈java之GUI与安卓

首先说说swing的特点: 1.拥有一个丰富,快捷的用户界面元素集合。 2.与运行平台的依赖性很小,因此bug很少。 3.对于不同的运行平台,可以给用户一致的感觉。但是所制作的用户界面与本地运行平台有很大的差别。 java的图像用户界面并不是他的强项,不管是最初的awt,还是后来的swing都是同样的,不过对于目前我个人安卓的学习来说,尽管是用了xml去写...