为什么在拖动时会是这样?好像有个影子,并且还不能紧跟鼠标。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class t
{
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
frame f = new frame();
}
}class frame extends JFrame{
JLabel nd;
int lx,ly,focusx,focusy;
public frame()
{
super("asdfsadf");
setSize(500,500);
Container c=getContentPane();
c.setBackground(Color.white);
c.setLayout(null);
JLabel b1=new JLabel("sdfasf");
b1.setBounds(200,200,100,25);
b1.addMouseListener(new MouseProcess());
b1.addMouseMotionListener(new MouseMotionProcess());
c.add(b1);
show();
} private class MouseProcess extends MouseAdapter
{ public void mousePressed(MouseEvent e)
{
nd=(JLabel)e.getSource();
lx=e.getX();ly=e.getY();
focusx = nd.getX(); focusy = nd.getY();
nd=null;
}
public void mouseReleased(MouseEvent e)
{
}
} private class MouseMotionProcess extends MouseMotionAdapter
{
public void mouseDragged(MouseEvent e)
{
nd=(JLabel)e.getSource();
int w = lx-focusx;
int h = ly-focusy;
int x = e.getX()+w+focusx-lx;
int y = e.getY()+h+focusy-ly;
if( x < 0 ) x = 0; if( y < 0 ) y = 0;
nd.setLocation(x, y);
nd.updateUI();
}
}}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class t
{
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
frame f = new frame();
}
}class frame extends JFrame{
JLabel nd;
int lx,ly,focusx,focusy;
public frame()
{
super("asdfsadf");
setSize(500,500);
Container c=getContentPane();
c.setBackground(Color.white);
c.setLayout(null);
JLabel b1=new JLabel("sdfasf");
b1.setBounds(200,200,100,25);
b1.addMouseListener(new MouseProcess());
b1.addMouseMotionListener(new MouseMotionProcess());
c.add(b1);
show();
} private class MouseProcess extends MouseAdapter
{ public void mousePressed(MouseEvent e)
{
nd=(JLabel)e.getSource();
lx=e.getX();ly=e.getY();
focusx = nd.getX(); focusy = nd.getY();
nd=null;
}
public void mouseReleased(MouseEvent e)
{
}
} private class MouseMotionProcess extends MouseMotionAdapter
{
public void mouseDragged(MouseEvent e)
{
nd=(JLabel)e.getSource();
int w = lx-focusx;
int h = ly-focusy;
int x = e.getX()+w+focusx-lx;
int y = e.getY()+h+focusy-ly;
if( x < 0 ) x = 0; if( y < 0 ) y = 0;
nd.setLocation(x, y);
nd.updateUI();
}
}}
package project1.demo1;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;public class Contenttest extends JApplet {
JButton b = new JButton("add"); public void init() { // contentPane.add(desk, BorderLayout.CENTER);
final JScrollPane scrollPane = new JScrollPane();
Glasspane glass = new Glasspane(b);
JViewport view = new JViewport() {
public void paintComponent(Graphics g) {
Dimension size = getSize();
Image image = getToolkit().getImage("C:/DefaultMap.gif");
g.drawImage(image, 0, 0, size.width, size.height, this);
}
};
scrollPane.setViewport(view);
glass.setOpaque(false);
scrollPane.setViewportView(glass);
getContentPane().add(b, BorderLayout.NORTH);
getContentPane().add(scrollPane, BorderLayout.CENTER);
}
}class Glasspane extends JPanel {
JLabel jButton2 = new JLabel(); JButton b = new JButton("add"); int m = 0; public Glasspane(JButton b) {
super();
this.b = b;
this.setLocale(java.util.Locale.getDefault());
setLayout(new FlowLayout());
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
m = m + 1;
buttons jButton1 = new buttons();
add(jButton1);
revalidate();
}
});
this.setSize(400, 500);
this.setVisible(true);
setOpaque(false);
} // private class MouseProcess extends MouseAdapter {
// public void mouseClicked(MouseEvent e) {
//
// }
//
// public void mousePressed(MouseEvent e) {
// int focusx = 0;
// int focusy = 0;
// focusx = e.getX();
// focusy = e.getY();
//
// }
// } class buttons extends JLabel {
int focusx = 0; int focusy = 0; buttons() {
setPreferredSize(new Dimension(60, 30));
setBounds(new Rectangle(86, 113, 73, 25));
setText("m" + m);
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
focusx = e.getX();
focusy = e.getY();
}
});
addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) {
Container container = getParent();
System.out.println(container);
int w = container.getWidth();
int h = container.getHeight(); int x = getX() + e.getX() - focusx;
int y = getY() + e.getY() - focusy;
if (x + getWidth() > w)
x = w - getWidth();
if (y + getHeight() > h)
y = h - getHeight();
if (x < 0)
x = 0;
if (y < 0)
y = 0;
// setLocation(x, y);
setLocation(x, y + getHeight());
// container.repaint();
// container = null;
}
});
}
}
}
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
import javax.swing.JLabel;public class t
{
public static void main(String args[])
{
JFrame.setDefaultLookAndFeelDecorated(true);
frame f = new frame();
}
}class frame extends JFrame{
JLabel nd;
int lx, ly, focusx, focusy; public frame()
{
super("asdfsadf");
setSize(500, 500); Container c = getContentPane();
c.setBackground(Color.white);
c.setLayout(null); JLabel b1 = new JLabel("sdfasf");
b1.setBounds(200, 200, 100, 25);
b1.addMouseListener(new MouseProcess());
b1.addMouseMotionListener(new MouseMotionProcess());
c.add(b1);
show();
} private class MouseProcess extends MouseAdapter
{ public void mousePressed(MouseEvent e)
{
nd = (JLabel) e.getSource();
lx = e.getX();
ly = e.getY();
// focusx = nd.getX() + lx;
// focusy = nd.getY() + ly;
nd = null;
} public void mouseReleased(MouseEvent e)
{ }
} private class MouseMotionProcess extends MouseMotionAdapter
{
public void mouseDragged(MouseEvent e)
{
nd = (JLabel) e.getSource();
int w = e.getX() - lx;
int h = e.getY() - ly;
int x = nd.getX() + w;
int y = nd.getY() + h;
if (x < 0)
x = 0;
if (y < 0)
y = 0;
nd.setLocation(x, y);
nd.updateUI();
} }}
和 e.getY()
是相对于控件内部的 所以你的计算公式就不对了正确的贴上LS