java repaint 为什么原图还在_java 图形界面,repaint 问题

谁能看一下这个图形化界面的问题:在滚动条中添加标签组件来显示图片,在鼠标点击到的位置用绘图矩形框包围并且对每次点击的矩形框刷新,为什么我这个矩形框总不在鼠标点击的位置impo...

谁能看一下这个图形化界面的问题:在滚动条中添加标签组件来显示图片,在鼠标点击到的位置用绘图矩形框包围并且对每次点击的矩形框刷新,为什么我这个矩形框总不在鼠标点击的位置

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class win extends JFrame implements ActionListener{

int rectanNumber=50; //固定矩形框大小

static int start_x,start_y; //鼠标初始与末的位置

static Image image;

Rectangle rectangle=new Rectangle(0,0,0,0);

JLabel label=new JLabel();

JMenuBar jmenubar=new JMenuBar();

JMenu jFileMenu=new JMenu("文件");

JMenuItem jchooserPicMenuitem=new JMenuItem("选择图片");

JPanel mypane=new JPanel();

private JScrollPane scrollMypane;

JFileChooser chooser=new JFileChooser();

Point pointStart=new Point(0,0);

Point pointEnd=new Point(0,0);

//构造函数

public win() {

super("浏览图片");

jmenubar.add(jFileMenu);

jFileMenu.add(jchooserPicMenuitem);

jchooserPicMenuitem.addActionListener(this);

this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

this.setLayout(new BorderLayout());

this.add(jmenubar,BorderLayout.NORTH);

this.add(mypane,BorderLayout.CENTER);

scrollMypane = new JScrollPane(mypane);

this.add(scrollMypane,BorderLayout.CENTER);

this.setLocation(200, 5);

this.setSize(400,60);

this.setVisible(true);

}

//监视器

public void actionPerformed(ActionEvent e){

int i=chooser.showOpenDialog(this);

if(i==chooser.APPROVE_OPTION){

image=new ImageIcon(chooser.getSelectedFile().getPath()).getImage();

mypane.add(label);

setSize(600,600);

image=image.getScaledInstance (image.getWidth(null),image.getHeight(null), Image.SCALE_DEFAULT );

label.setIcon(new ImageIcon(image));

label.addMouseListener(new MouseAdapter() {

@Override

public void mousePressed(MouseEvent e) {

super.mousePressed(e);

start_x=e.getX();

start_y=e.getY();

pointStart=pointEnd;

pointEnd=new Point(e.getX(),e.getY());

rectangle = new Rectangle(start_x-rectanNumber, start_y-rectanNumber, 2*rectanNumber, 2*rectanNumber);

repaint();

}

});

}

}

@Override

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.RED);

g.drawRect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);

}

public static void main (String[] args)

{

new win();

}

}

展开

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值