使用圖像根據需要,可以有多種方法。
如果是放在組件中,如JButton、JLabel中,這些組件需要的是Icon介面的圖像,那麼使用ImageIcon類來載入圖像比較好,new
ImageIcon(String
filename)或new
ImageIcon(URL
location)都可以直接載入圖像文件。
甚至你還可以先用IO讀出byte流,也能用byte[]創建ImageIcon。還可以由已有的Image來創建。
更為高級的用法是,你還可以先創建個空的ImageIcon,然後重寫paintIcon(Component,Graphics,int,int)方法實現手工繪制!
如果你是要完成圖像繪制,那麼使用Image或BufferedImage比較好。
Toolkit.getDefaultToolkit().getImage(String或URL)就能載入圖像。
這種方法需要一個圖像觀察者來監視圖像是否載入完成,因為圖像載入是非同步的。通常,你用一個swing組件就可以充當這個角色。不過少用JLabel,因為我有一個程序用JLabel做觀察者CPU佔用率經常90%多,有時不出界面。用JPanel或JFrame都沒出過這個問題。從API文檔看,應該是所有的swing可視組件都實現了觀察者介面。
選了觀察者後,不用刻意觀察載入情況,很簡單的一個方法:swing組件的while(!prepareImage(Image));就可以了。
Image介面是Graphics類繪圖drawImage要用的,所以繪制時應該選這個。
BufferedImage是實現了Image介面的圖像,可以直接操作像索數據!所以利用演算法生成圖像再繪制,或圖像處理可以使用這種方法。如浮雕、反色等。
載入方法是ImageIO類的read方法。
㈡ java顯示ico格式圖片
不知道你是不是要這種效果
代碼如下:
//要求:在JFrame裡面顯示一個ico格式的圖片,放在JPanel,JLable,或者JButton上
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyIcon extends JFrame{
private Icon myIcon;
private JPanel myPanel;
private JLabel myLabel;
private JButton myButton;
private Container c;
public MyIcon(){
c=getContentPane();
myIcon=new ImageIcon("myIcon.jpg");
myPanel=new JPanel();
myPanel.setLayout(new BorderLayout());
myButton=new JButton("這里是按鈕顯示icon",myIcon); //這里把icon圖作為圖標
myLabel=new JLabel("這里是JLable顯示icon",myIcon,JLabel.LEFT);
myPanel.add(myButton,BorderLayout.SOUTH);
myPanel.add(myLabel,BorderLayout.CENTER);
myPanel.setPreferredSize(new Dimension(100, 100));
c.add(myPanel);
setBounds(100,100,400,300);
setVisible(true);
}
public static void main(String args[]){
MyIcon app=new MyIcon();
}
}
純手打,求採納!!
㈢ Java對話框上顯示圖片
其實有很多種方法可以解決圖片顯示大小的問題:
使用photoshop修改. 優點是可以節省系統資源, 顯示圖片的時候,不用做處理,缺點是需要了解ps的基本操作
使用JDialog 自定義對話框. 優點 可以實現復雜的效果, 缺點,代碼量比較多
使用ImageIcon, Image 類 實現圖片的縮放,. 優點: 純java代碼解決, 缺點: 如果大量的圖片需要縮放, 那麼可能影響程序的速度.
方案3的代碼如下
importjava.awt.Image;
importjavax.swing.ImageIcon;
importjavax.swing.JOptionPane;
publicclassTest{
publicstaticvoidmain(String[]args){
ImageIconicon=newImageIcon("imgs/1.png");//得到icon對象.注意我的圖片地址和你的不一樣,注意修改!!
Imageimage=icon.getImage();//icon--->Image
floatscale=0.5f;//縮放比例50%
intwidth=Math.round(icon.getIconWidth()*scale);//變小50%的寬
intheight=Math.round(icon.getIconHeight()*scale);//變小50%的高
ImageminiIcon=image.getScaledInstance(width,height,Image.SCALE_SMOOTH);
//image變成指定大小.縮放模式為SCALE_SMOOTH(平滑優先)
ImageIconsmallIcon=newImageIcon(miniIcon);//Image--->icon
JOptionPane.showInputDialog(null,"吃了嗎?","標題",0,smallIcon,null,"默認值");
}
}
效果圖
圖1 圖片顯示比例為原圖的50%
㈣ java中怎樣讓panel完全透明,只顯示上面的圖片
import javax.swing.* ;
public class 1 {
public static void main(String args[]){
ImageIcon img = new ImageIcon("1.jpg"); /*負責顯示圖像的JLable對象*/
JLabel jl = new JLabel(img);
JPanel j = new JPanel() ; /*在JFrame上add上面板j*/
JFrame jf = new JFrame() ;
jf.setContentPane(j) ;
j.add(jl) ; /*在面板j上add上JLable對象j1*/
JPanel jjj = new JPanel() ; /*創建一個透明的面板放在JLable對象j1上負責放控制項,此例中放置了一個按鈕*/
jl.add(jjj) ;
jjj.setSize(200, 100) ; /*這里注意要設置大小*/
jjj.setOpaque(false) ; /*將負責放置控制項的面板設置成透明,詳細請查API*/
jjj.add(new JButton("確定")) ; /*添加按鈕*/
jf.setVisible(true) ;
jf.setSize(500, 300) ;
}
}
容器從頂層開始順序如下:
jf(JFrame對象實例) --> j (JPanel對象實例,無須設置透明) --> j1(JLable對象實例,負責顯示圖片)
--> jjj(JPanel對象實例,負責放置控制項,需要設置成透明才不會讓自身的底色覆蓋了上層圖片)
㈤ Java 面板上顯示圖片的語句怎麼寫,最好舉個例子...
第一種方法:用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: http://blog.csdn.net/mq612
* @Blog: http://hi..com/mq612/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();
}
}
㈥ java如何讀取文件夾中的圖片並在界面顯示
下面給你提供一個實現,該實現採用了代理模式。這個實現包含兩個文件,分別是Client.java和ImageIcoProxy.java,ImageIcoProxy.java負責了圖片的延遲載入,你可以修改為不延遲即可。
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) {
//已經載入了圖片,直接顯示
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();
}
}
);
}
}
}
}