扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
效果图如下
在正镶白等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站建设 网站设计制作定制网站制作,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,成都外贸网站建设,正镶白网站建设费用合理。
swing和awt写法差别不大,我使用的是swing的组件
参考代码和注释如下
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//本窗口继承自JFrame 实现了 ActionListener接口
public class JCBFrame extends JFrame implements ItemListener{
JComboBoxString jcb;
JLabel jlimg;
// 文字
String[] ss = {"樱桃","香蕉","西瓜"};
//文字对应图片位置
String[] icons = {"img/1.jpg","img/2.jpg","img/3.jpg"};
int init = 2;//初始选择的下标--西瓜
public JCBFrame() {
jcb = new JComboBoxString(ss);
jcb.setSelectedIndex(init);//初始选择的项目
jcb.addItemListener(this);//设置条目事件响应 ,比如选中某个条目的处理
add(jcb,BorderLayout.NORTH);
jlimg = new JLabel();
jlimg.setHorizontalAlignment(JLabel.CENTER);
add(jlimg);
showImg(init);//初始显示的图片
//窗口属性的设置
setTitle("测试窗口");//标题
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(260, 300);//大小
setLocationRelativeTo(null);//居中
}
//显示图片
private void showImg(int index) {
jlimg.setIcon( new ImageIcon(this.getClass().getResource(icons[index])));
}
//main方法
public static void main(String[] args) {
new JCBFrame().setVisible(true);//实例化并可见
}
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED) {//当选择某个条目时
showImg(jcb.getSelectedIndex());//显示的图片改变
}
}
}
第一种方法:用JLabel显示图片,此种方法图片是一个UI控件,通过布局管理器可放在面板的任意位置,一般用于较小的图标显示,图片上不能再放置其它控件。
第二种方法:在JPanel面板容器中将图片绘制出来,可通过绘制坐标将图片显示在面板的任意位置,一般用于背景图,图片本身不是UI控件,因此图片上还可以放置其它控件。
例子:
package net.miqiang.gui;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Java面板中显示图片的两种常用方法
* @FileName: TestMain.java
* @Author: 米强 转载请保留作者与出处
* @Blog:
* @Blog:
*/
@SuppressWarnings("serial")
public class TestMain extends JFrame {
public TestMain() {
super("显示图片的两种方法");
// JPanel面板容器,放置或绘制图片用
JPanel pane = null;
// 获取一个Image图片对象,使用final修饰为了第二种方法的匿名类可以使用
final Image image = getToolkit().getImage("C:\\face.jpg");
{
// 将第二种方法的代码块全部注释掉,可看到第一种方法显示的图片
// 第一种方法:用JLabel显示图片,此种方法图片是一个UI控件,通过布局管理器可放在面板的任意位置,一般用于较小的图标显示,图片上不能再放置其它控件。
// 通过图片构造一个标签对象
JLabel label = new JLabel(new ImageIcon(image));
// 构造JPanel面板
pane = new JPanel();
// 将标签添加进面板容器
pane.add(label);
}
/*
{
// 将第一种方法的代码块全部注释掉
// 第二种方法:在JPanel面板容器中将图片绘制出来,可通过绘制坐标将图片显示在面板的任意位置,一般用于背景图,图片本身不是UI控件,因此图片上还可以放置其它控件。
// 构造面板对象,由于要重写其中的paintComponent方法,这里使用匿名类,相当于继承了JPanel对象
pane = new JPanel(){
// 重写面板的绘制方法
@Override
protected void paintComponent(Graphics g) {
// 调用父类的paintComponent方法
super.paintComponent(g);
// 使用Graphics绘制图片
g.drawImage(image, 0, 0, this);
}
};
// 随便添加一个按钮控件,该按钮可以显示在图片上方,第一种方法则无法办到。
pane.add(new JButton("按钮可以出现在图片上"));
}
*/
// 将面板添加进窗体的ContentPane中
getContentPane().add(pane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 400);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new TestMain();
}
}
其实有很多种方法可以解决图片显示大小的问题:
使用photoshop修改. 优点是可以节省系统资源, 显示图片的时候,不用做处理,缺点是需要了解ps的基本操作
使用JDialog 自定义对话框. 优点 可以实现复杂的效果, 缺点,代码量比较多
使用ImageIcon, Image 类 实现图片的缩放,. 优点: 纯java代码解决, 缺点: 如果大量的图片需要缩放, 那么可能影响程序的速度.
方案3的代码如下
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class Test {
public static void main(String[] args) {
ImageIcon icon = new ImageIcon("imgs/1.png"); // 得到icon对象 .注意我的图片地址和你的不一样,注意修改!!
Image image = icon.getImage(); //icon---Image
float scale = 0.5f; //缩放比例 50%
int width = Math.round(icon.getIconWidth()*scale); // 变小 50%的宽
int height= Math.round(icon.getIconHeight()*scale);// 变小50%的高
Image miniIcon = image.getScaledInstance(width, height, Image.SCALE_SMOOTH);
// image 变成指定大小. 缩放模式为 SCALE_SMOOTH(平滑优先)
ImageIcon smallIcon = new ImageIcon(miniIcon);// Image---icon
JOptionPane.showInputDialog(null, "吃了吗?", "标题", 0, smallIcon, null, "默认值");
}
}
效果图
图1 图片显示比例为原图的50%
图2 图片显示比例为原图的120%
不是很明白,
类似于启动界面的么?
import javax.swing.*;
import java.awt.*;
import java.net.*;
public class JSplashWindow extends JWindow implements Runnable
{
Thread splashThread=null;
public JSplashWindow()
{
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));//设置启动界面的光标样式
JPanel splash=new JPanel(new BorderLayout());
URL url=getClass().getResource("1.jpg");//获得指定资源文件的绝对路径。
if(url!=null)
{
splash.add(new JLabel(new ImageIcon(url)),BorderLayout.CENTER);
}
setContentPane(splash);
Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();//获得屏幕的大小
pack();
setLocation((screen.width-getSize().width)/2,(screen.height-getSize().height)/2);//使启动窗口居中显示
start();
}
public void start()
{
toFront();//window类的toFront()方法可以让启动界面显示的时候暂时在最前面,用window类的setAlwayOnTop(boolean)方法可以让窗口总保持在最前面。
splashThread=new Thread(this);
splashThread.start();
}
public void run()
{
try
{
setVisible(true);
Thread.sleep(50000);
}
catch(Exception e)
{
e.printStackTrace();
}
dispose();
}
static void showFrame(String title)
{
JFrame frame=new JFrame(title);
frame.setSize(400,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize=frame.getToolkit().getScreenSize();//获得屏幕的大小
Dimension frameSize=frame.getSize();
if(frameSize.heightscreenSize.height)
{
frameSize.height=screenSize.height;
}
if(frameSize.widthscreenSize.width)
{
frameSize.width=screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
frame.setVisible(true);
}
public static void main(String[] args)
{
showFrame("Demo splash window");
JSplashWindow splash=new JSplashWindow();
//splash.start();
}
}
/*getToolkit()方法是java.awt.window类的方法它可以得到一个Toolkit类。Toolkit对象的getScreenSize()方法可以得到屏幕的大小。
getScreenSize()方法返回一个 Dimension对象,它的width,height属性就是屏幕的宽和高。
Object getClass()方法是java.lang.Object类的方法它可以获得当前正在运行类的对象
URL getResource(String name)方法是java.lang.Class类的方法用此方法可以获得一个指定资源文件的绝对路径。*/
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流