其實(shí)有很多種方法可以解決圖片顯示大小的問(wèn)題:
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)衛(wèi)輝免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
使用photoshop修改. 優(yōu)點(diǎn)是可以節(jié)省系統(tǒng)資源, 顯示圖片的時(shí)候,不用做處理,缺點(diǎn)是需要了解ps的基本操作
使用JDialog 自定義對(duì)話框. 優(yōu)點(diǎn) 可以實(shí)現(xiàn)復(fù)雜的效果, 缺點(diǎn),代碼量比較多
使用ImageIcon, Image 類 實(shí)現(xiàn)圖片的縮放,. 優(yōu)點(diǎn): 純java代碼解決, 缺點(diǎn): 如果大量的圖片需要縮放, 那么可能影響程序的速度.
方案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對(duì)象?.注意我的圖片地址和你的不一樣,注意修改!!
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(平滑優(yōu)先)
ImageIcon?smallIcon?=?new?ImageIcon(miniIcon);//?Image---icon
JOptionPane.showInputDialog(null,?"吃了嗎?",?"標(biāo)題",?0,?smallIcon,?null,?"默認(rèn)值");
}
}
效果圖
圖1 圖片顯示比例為原圖的50%
圖2 圖片顯示比例為原圖的120%
是這樣的,你在面板上搞一個(gè)和面板一樣大的JLabel
然后,通過(guò)JFileChooser獲得路徑,利用這個(gè)圖片的路徑,構(gòu)建一個(gè)ImageIcon
最后,根據(jù)這個(gè)ImageIcon去給JLabel對(duì)象setIcon(ImageIcon對(duì)象);
具體地:
1.panel.add(label,BorderLayout.CENTER);
2.ImageIcon icon = new ImageIcon(url);
3.label.setIcon(icon);
下面的代碼你把 .JPG改成BMP試試看,O(∩_∩)O~
package com.shlq.sample;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ImagePane extends JPanel
{
JLabel jl = null;
ImageIcon img = null;
public ImagePane()
{
img = new ImageIcon( "E:\\Picture\\1.jpg ");
jl = new JLabel(img);
this.setLayout(new BorderLayout());
this.add(jl, BorderLayout.CENTER);
}
public static void main(String[] args)
{
JFrame test = new JFrame( "Image Pane ");
test.getContentPane().add(new ImagePane());
test.pack();
test.setVisible(true);
test.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
不是很明白,
類似于啟動(dòng)界面的么?
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));//設(shè)置啟動(dòng)界面的光標(biāo)樣式
JPanel splash=new JPanel(new BorderLayout());
URL url=getClass().getResource("1.jpg");//獲得指定資源文件的絕對(duì)路徑。
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);//使啟動(dòng)窗口居中顯示
start();
}
public void start()
{
toFront();//window類的toFront()方法可以讓啟動(dòng)界面顯示的時(shí)候暫時(shí)在最前面,用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類的方法它可以得到一個(gè)Toolkit類。Toolkit對(duì)象的getScreenSize()方法可以得到屏幕的大小。
getScreenSize()方法返回一個(gè) Dimension對(duì)象,它的width,height屬性就是屏幕的寬和高。
Object getClass()方法是java.lang.Object類的方法它可以獲得當(dāng)前正在運(yùn)行類的對(duì)象
URL getResource(String name)方法是java.lang.Class類的方法用此方法可以獲得一個(gè)指定資源文件的絕對(duì)路徑。*/
在面板上搞一個(gè)和面板一樣大的JLabel
然后,通過(guò)JFileChooser獲得路徑,利用這個(gè)圖片的路徑,構(gòu)建一個(gè)ImageIcon
最后,根據(jù)這個(gè)ImageIcon去給JLabel對(duì)象setIcon(ImageIcon對(duì)象);
具體地:
1.panel.add(label,BorderLayout.CENTER);
2.ImageIcon icon = new ImageIcon(url);
3.label.setIcon(icon);
下面的代碼你把 .JPG改成BMP試試看,O(∩_∩)O~
package com.shlq.sample;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ImagePane extends JPanel
{
JLabel jl = null;
ImageIcon img = null;
public ImagePane()
{
img = new ImageIcon( "E:\\Picture\\1.jpg ");
jl = new JLabel(img);
this.setLayout(new BorderLayout());
this.add(jl, BorderLayout.CENTER);
}
public static void main(String[] args)
{
JFrame test = new JFrame( "Image Pane ");
test.getContentPane().add(new ImagePane());
test.pack();
test.setVisible(true);
test.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
下面給你提供一個(gè)實(shí)現(xiàn),該實(shí)現(xiàn)采用了代理模式。這個(gè)實(shí)現(xiàn)包含兩個(gè)文件,分別是Client.java和ImageIcoProxy.java,ImageIcoProxy.java負(fù)責(zé)了圖片的延遲加載,你可以修改為不延遲即可。
Client.java的代碼為:
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.Icon;
import javax.swing.JFrame;
public class Client extends JFrame {
private static int IMG_WIDTH = 510;
private static int IMG_HEIGHT = 317;
private Icon imgProxy = null;
public static void main(String[] args) {
Client app = new Client();
app.setVisible(true);
}
public Client() {
super("Virture Proxy Client");
imgProxy = new ImageIcoProxy("D:/test.jpg", IMG_WIDTH, IMG_HEIGHT);
this.setBounds(100, 100, IMG_WIDTH + 10, IMG_HEIGHT + 30);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
super.paint(g);
Insets insets = getInsets();
imgProxy.paintIcon(this, g, insets.left, insets.top);
}
}
ImageIcoProxy.java的代碼為:
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
public class ImageIcoProxy implements Icon {
private ImageIcon realIcon = null;
private String imgName;
private int width;
private int height;
boolean isIconCreated = false;
public ImageIcoProxy(String imgName, int width, int height) {
this.imgName = imgName;
this.width = width;
this.height = height;
}
public int getIconHeight() {
return realIcon.getIconHeight();
}
public int getIconWidth() {
return realIcon.getIconWidth();
}
public void paintIcon(final Component c, Graphics g, int x, int y) {
if (isIconCreated) {
//已經(jīng)加載了圖片,直接顯示
realIcon.paintIcon(c, g, x, y);
g.drawString("Just Test", x + 20, y + 370);
} else {
g.drawRect(x, y, width-1, height-1);
g.drawString("Loading photo...", x+20, y+20);
synchronized(this) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(2000);
realIcon = new ImageIcon(imgName);
isIconCreated = true;
} catch (Exception e) {
e.printStackTrace();
}
c.repaint();
}
}
);
}
}
}
}
final ImageView iv=(ImageView)findViewById(R.id.iv);
Button bt=(Button)findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
// TODO: Implement this method
if(iv.getDrawable()!=null)
iv.setImageResource(R.id.photo);
else iv.setImageResource(0);
}
});
網(wǎng)站欄目:java顯示圖片的代碼,java讀取圖片并顯示
當(dāng)前URL:http://muchs.cn/article16/phesgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、用戶體驗(yàn)、企業(yè)網(wǎng)站制作、定制網(wǎng)站、網(wǎng)站改版、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)