如果你直接new一个组件的话,组件是标准外观
如果需要改变组件的外观,最关键的就是要就需要重写组件的paintCoponent(Graphics g)方法,同时需要调整组件的大小
DIY的JPanel
下面用代码说话
import javax.swing.*;
import java.awt.*;
class ImagePanel extends JPanel{
private Image image;
private Dimension dimension;
public ImagePanel(Image image){
this.image=image;
dimension=new Dimension(image.getWidth(null),image.getHeight(null));
setSize(dimension);
setPreferredSize(dimension);
setMinimumSize(dimension);
setMaximumSize(dimension);
}
public void paintComponent(Graphics g){
g.drawImage(image,0,0,(int)(dimension.getWidth()*0.5),(int)(dimension.getHeight()*0.5),null);
}
}
class Demo{
public static void main(String[] args){
ImagePanel panel=new ImagePanel(new ImageIcon("D:\\微信截图_20151227195429.png").getImage());
JFrame frame=new JFrame("haha");
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
}
下面是结果
用到了以下几个类
1.Graphics用来绘画图像, java.awt
2.Dimension用来设置各种大小,java.awt
3.Image用来储存背景的抽象类,java.awt
4.ImageIcon用来创建Image的实例,此类实现了Icon接口,javax.swing
解释几处做法
一、为什么这里设置了4个尺寸呢?
setSize(dimension);
setPreferredSize(dimension);
setMinimumSize(dimension);
setMaximumSize(dimension);
尺寸,偏好尺寸,最小尺寸,最大尺寸
因为并不确定要放进容器的布局
因为当布局为null也就是绝对布局的时候,只需要设置serSize就可以了
当布局不为空时,此时布局管理器会相应的调整图像的尺寸了
如何进行图像缩放
当组件的图像太大时,甚至超过了屏幕,此时就需要进行缩放了
处理的地方是
g.drawImage(image,0,0,(int)(dimension.getWidth()*0.5),(int)(dimension.getHeight()*0.5),null);
这里就要说说Graphics类中绘制图像的方法了
drawImage(Image image,int x,int y,ImageObserver observer);
drawImage(Image image,int x,int y,int width,int height,ImageObserver observer);
第一种方法是没有进行缩放的,第二种方法进行了缩放
缩放后的大小为width*height,缩放的方法可以参照上面代码,进行等比例缩放
至于那个ImageObserver有什么用,我还不知道
API是这样解释的
此方法在任何情况下都立刻返回,甚至在要绘制的图像区域没有针对当前输出设备完成缩放、抖动或转换的情况下也是如此。如果当前的输出表示形式尚未完成,则 drawImage 返回 false。随着更多的图像可用,加载图像的进程将通知指定的图像观察者。
observer - 当缩放并转换了更多图像时要通知的对象。
ImageObserver用于在构造 Image 时,接收有关 Image 信息通知的异步更新接口。
我的理解是,当设置好了背景之后,并不一定是马上在输出设备上体现出来,需要一定的时间
如果上一个设置图像还在输出的时候又设置一次图像的话,那么方法返回false,并等到上一次设置图像输出完毕了之后,通知指定的图像观察者,图像观察者就调用imageUpdate方法,更新图像
DIY的JLable
下面还是用代码说话
import java.awt.*;
import javax.swing.*;
class JLabelDemo extends JLabel{
JLabelDemo(String image){
this((new ImageIcon(image)).getImage());
}
JLabelDemo(Image image){
setSize(image.getWidth(null),image.getHeight(null));
setIcon(new ImageIcon(image));
setText(null);
setBorder(null);
setIconTextGap(0);
setOpaque(false);
}
}
如果要自定义一个JLabel,有以下几步需要做的:
1.设置icon,JLabel类中有setIcon()方法,也就自然不需要我们来覆写paintComponent方法啦
2.设置Label尺寸
3.设置Label是否有边框
4.设置Label是否透明(这点很重要,直接影响效果(如果面板有背景的话))
5.设置文本内容
6.设置文本内容和图标的距离##(如果不需要文本内容的话,这时候Label可以直接当成是插入图片去用)##
下面是两种结果,分别是背景透明和背景不透明
DIY的JButton
下面仍然是用代码说话
import javax.swing.*;
import java.awt.*;
class JButtonDemo extends JButton{
JButtonDemo(String image){
this(new ImageIcon(image),null);
}
JButtonDemo(String image,String text){
this(new ImageIcon(image),text);
}
JButtonDemo(ImageIcon icon,String text){
setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null));
setIcon(icon);
setText(text);
setIconTextGap(0);
setBorder(null);
setBorderPainted(false);
setMargin(new Insets(0,0,0,0));
}
}
自定义Label和自定义Button的步骤差不多
只是多了边空和边框这两个属性
解释几点
一、边空是什么呢?
边空就是当图标和文本都画完了之后,图标和文本离边框还有一定距离时,就会绘画边空了,就是白边
用setMargin(Insets m)可以设置
setMargin(new Insets(0,1,2,3));
注意到实例化Insets有四个参数分别是距离上左下右边界的距离
需要注意的是:::::如果不想要边空的话
setMargin(null);
这样子做的话,是不会起效果的,反而是用了默认边空,由Border对象适当的建立边空
如果想不需要边空的话,只能这样做
setMargin(new Insets(0,0,0,0));
二、setIcon远远不够
setIcon只是设置了这个按钮的默认外观,实际开发还需要设置以下几种外观:
1.光标按下去时的外观——setPressedIcon(ImageIcon)
2.鼠标滚动外观——setRolloverIcon(ImageIcon)
3.选中外观——setSelectedIcon(ImageIcon)
…..
下面是结果
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
4.2.1 对象创建时获取 4.2.2 层次关系来获取 4.2.3 当前对象的获取 4.2.4 根据对象属性值的获取 4.3 图形对象句柄的删除与判断 4.3.1 句柄的删除 4.3.2 句柄的判断 4.4 图形对象属性值的获取与设置 4.4.1 ...
4.2.1 对象创建时获取 4.2.2 层次关系来获取 4.2.3 当前对象的获取 4.2.4 根据对象属性值的获取 4.3 图形对象句柄的删除与判断 4.3.1 句柄的删除 4.3.2 句柄的判断 4.4 图形对象属性值的获取与设置 4.4.1 ...
图形图像处理源程序-matlab6.5图形图像处理源程序.rar 这是一些图形图像处理源程序,需要的话可以参考一下 第一章 MATLAB6.5 基础 1.1 MATLAB 语言介绍 1.1.1 MATLAB 产品系列与应用 1.1.2 MATLAB6.5 的...
4.2.1 对象创建时获取 4.2.2 层次关系来获取 4.2.3 当前对象的获取 4.2.4 根据对象属性值的获取 4.3 图形对象句柄的删除与判断 4.3.1 句柄的删除 4.3.2 句柄的判断 4.4 图形对象属性值的获取与设置 4.4.1 ...
创建填充的等值线图 49 在显示窗口定位图形输出 51 设置图形边缘 52 设置图形位置 52 设置图形区域 53 创建多个图形 53 给图形显示添加文本 57 找出可用字体的名称 58 用XYOutS命令添加文本 58 用矢量字体使用XYOut ...
支持绘制文本,图像和形状到 PDF,从 PDF 文件中提取文本,创建和填充 PDF 表单域。 Free Spire.PDF for JAVA 支持创建 PDF/A-1 文档。 2. 高质量的 PDF 文档转换。 支持将 PDF 文档转换为 XPS,和高品质的图像文件...
4.2.1 对象创建时获取 4.2.2 层次关系来获取 4.2.3 当前对象的获取 4.2.4 根据对象属性值的获取 4.3 图形对象句柄的删除与判断 4.3.1 句柄的删除 4.3.2 句柄的判断 4.4 图形对象属性值的获取与设置 4.4.1 ...
创建填充的等值线图 49 在显示窗口定位图形输出 51 设置图形边缘 52 设置图形位置 52 设置图形区域 53 创建多个图形 53 给图形显示添加文本 57 找出可用字体的名称 58 用XYOutS命令添加文本 58 用矢量字体使用XYOut ...
使用复杂XML数据来填充组件 19.10节. 从Web服务中把XML译码成为强类型对象 第二十章与浏览器通信(628) 20.1节连接到外部URL 20.2节使用FlashVars 20.3节在Flex里面调用JavaScript函数方法 20.4节在JavaScript中调用...
2.4.3 创建自定义填充序列 2.4.4 编辑或删除自定义序列 2.5 数据的复制、剪切和粘贴 2.5.1 复制与粘贴 2.5.2 剪切与粘贴 2.6 自动完成与自动换行 2.6.1 打开与关闭自动完成功能 2.6.2 在单元格中自动...
另一种就是不透明,不透明的就是在窗口上创建一个组件,用来绘画 还有一些属性懒得去弄了,有兴趣的取弄一下属性吧 比如底图,用户设置了底图,那就把底图载入,然后选入dc中,这样就有底图了 还有画笔类型什么的....我都...
创建完成后,您将使用回购维护者提供给您的秘密来填充它: .env : # MongoDB MONGO_URI=YOUR MONGO URI # AWS AWS_ACCESS_KEY_ID=YOUR AWS ACCESS KEY ID AWS_SECRET_ACCESS_KEY=YOUR AWS SECRET ACCESS KEY
要创建自己的图像,最灵活的方法是用一个 BufferedImage 对象,它是 Image 类的一个子类,它把图像数据存储在一个可以被访问的缓冲区中。它还支持各种存储像素数据的方法:使用或不使用 alpha 通道、不同种类的颜色...
使用这些图像,采用者可以通过创建基于这些图像的自定义图像并仅覆盖自定义的Grouper属性文件来快速启动Grouper环境。 可以在上找到执行此操作的示例。 快速开始 在下载源代码并运行docker-compose up查看这些图像...
使用该组件,程序员可以 在.NET 程序中创建、读取、写入、编辑和操作 PDF 文档。这个控件能支持的功能十分全面,例如文档安全性设置(电子签名),提取 PDF 文本、附件、图片,PDF 合并和拆分,更新 Metadata,设置 ...
动物是基于填充的表单元素创建的,通过单击动物的图像并在该位置指定伤害来添加伤害。兽医观察者: 这是兽医用来查看已输入系统的动物的组件。 All animals are loaded and when one is selected the details are ...
15.4.3 实现被聚合的COM组件 15.4.4 实现包容组件 15.4.5 编译、注册COM组件 15.4.6 创建一个对话框应用 15.5 双重接口 15.5.1 调度表 15.5.2 COleDispatchImpl 15.5.3 m_xDispatch成员 15.5.4 输出...
免费Spire.PDF for .NET 是一款由e-iceblue公司开发的专业性的PDF文档创建组件。它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档。Spire.PDF for .NET不仅可以...
使用axes命令创建一个轴位框,并将其设置为 normalized 单位,位置设置为 [0,0,1,1],使其填充整个图形窗口。 (2)生成静态文本和编辑框 使用uicontrol命令创建一个静态文本框和一个编辑框。静态文本框用于显示...