java标签如何设置图片_设置背景图,并在上面添加可随意拖动的图片标签

package testSwing;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Point;

import javax.swing.BorderFactory;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.SwingConstants;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.beans.PropertyChangeEvent;

import java.beans.PropertyChangeListener;

import java.io.File;

public class ModuleAdd extends JFrame{

//背景图片

JPanel jpanel;

ImageIcon p_w_picpath;

ImageIcon icon;

Image img;

//

int x, y;//鼠标双击时的坐标

ImageIcon markerIcon; //标签图标

//更改标签图片

private Point pressPoint; //press标签时的鼠标位

final int PREVIEW_SIZE = 100;

JFrame jf = new JFrame("更改标签图片");

JButton button = new JButton("");

//以当前路径创建文件选择器

JFileChooser chooser = new JFileChooser(".");

JLabel accessory = new JLabel();

public void changeMarker(){

chooser.setAccessory(accessory);//为文件选择器指定一个预览图片的附件组件

//设置预览图片组件的大小和边框

accessory.setPreferredSize(new Dimension(PREVIEW_SIZE, PREVIEW_SIZE));

accessory.setBorder(BorderFactory.createEtchedBorder());

//用于检测被选择文件的改变事件

chooser.addPropertyChangeListener(new PropertyChangeListener()

{

public void propertyChange(PropertyChangeEvent event)

{

//JFileChooser的被选文件已经发生了改变

if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)

{

File f = (File) event.getNewValue(); //获取用户选择的新文件

if (f == null)

{

accessory.setIcon(null);

return;

}

ImageIcon icon = new ImageIcon(f.getPath());  //将所文件读入ImageIcon对象中

//如果图像太大,则缩小它

if(icon.getIconWidth() > PREVIEW_SIZE)

{

icon = new ImageIcon(icon.getImage()

.getScaledInstance(PREVIEW_SIZE, -1, Image.SCALE_DEFAULT));

}

//改变accessory Label的图标

accessory.setIcon(icon);

}

}

});

button.setToolTipText("选择标签");

button.setIcon(new ImageIcon(JFrameBackground.class.getResource("/testSwing/Browse-64.png")));

//为buttom增加事件

button.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent event)

{

int result = chooser.showDialog(jf , "打开");  //显示文件对话框

//如果用户选择了APPROVE(赞同)按钮,即打开,保存及其等效按钮

if(result == JFileChooser.APPROVE_OPTION)

{

String name = chooser.getSelectedFile().getPath();

markerIcon=new ImageIcon(name); //显示指定图片

}

}

});

}

public void addMarker() {

final JLabel lablel = new JLabel("");

lablel.setHorizontalAlignment(SwingConstants.CENTER);

lablel.setIcon(markerIcon);

lablel.setBounds(x, y, 16, 16);

jpanel.add(lablel);

repaint();

//为添加的标签增加拖动事件

lablel.addMouseListener(new MouseAdapter(){

@Override

public void mousePressed(MouseEvent e) {

pressPoint = e.getPoint();

}

@Override

public void mouseReleased(MouseEvent e) {

pressPoint = null;

}

});

lablel.addMouseMotionListener(new MouseAdapter(){

@Override

public void mouseDragged(MouseEvent e) {

Point nowPoint = e.getPoint();        //当前鼠标拖拽到的鼠标位置

int diffX = nowPoint.x - pressPoint.x;

int diffY = nowPoint.y - pressPoint.y;

/**移动**/

lablel.setLocation(lablel.getX()+diffX,lablel.getY()+diffY);

System.out.println(lablel.getX()+"   "+lablel.getY());

}

});

}

public void ini() {

jpanel.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent m) {

if (m.getClickCount() == 2) {

x = m.getPoint().x;

y = m.getPoint().y;

System.out.println("x:"+x+"  y:"+y);

addMarker();

}

}

});

}

public ModuleAdd(){

setIconImage(Toolkit.getDefaultToolkit().getImage(ModuleAdd.class.getResource("/testSwing/swingTest.jpg")));

icon= new ImageIcon(SwingImgAdd.class.getResource("/testSwing/swingTest.jpg"));

img = icon.getImage();

jpanel = new JPanel(){

protected void paintComponent(Graphics g) {

g.drawImage(img, 0, 0, icon.getIconWidth(),

icon.getIconHeight(), icon.getImageObserver());

}

};

jpanel.setPreferredSize(new Dimension(icon.getIconWidth(),

icon.getIconHeight()));

ini();

changeMarker();

setTitle("增加标签");

button.setBounds(0,20,98,41);

getContentPane().add(button);

getContentPane().add(new JScrollPane( jpanel));

jpanel.setLayout(null);

this.setSize(780,550);

System.out.println(this.getSize());

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

this.setVisible(true);

}

public static void main(String[] args) {

new ModuleAdd();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值