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