Why I cannot Move my JLabel after I add SetToolTipText()?
Dear Friends:
I met a tough problem that I debugged for few days but cannot solve it.
after I add SetToolTipText I cannot Move my JLabel , what is wrong here?
see code below, here label1 cannot move.
If somebody can throw some lights, that will be wonderful,
so far no progress.
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.event.*;
publicclass DNDJLabelsextends JPanel{
protected JLabel label1, label2, label3, label4;
protected JLabel[] labels;
protected JLabel selectedLabel;
LineBorder black =new LineBorder(Color.black, 3,false);
int cx, cy;
protected Vector order =new Vector();
publicstaticvoid main(String[] args){
JFrame f =new JFrame("DNDJLabels");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new DNDJLabels());
f.setSize(600,700);
f.setLocation(200,200);
f.setVisible(true);
}
public DNDJLabels (){
setLayout(null);
addLabels();
label1.setBounds( 125, 150, 150, 60);
label2.setBounds(425, 150, 150, 60);
label3.setBounds( 125, 575, 150, 60);
label4.setBounds(425, 575, 150, 60);
label1.setBorder(black);
label2.setBorder(black);
label3.setBorder(black);
label4.setBorder(black);
//add(btn);
label1.setToolTipText("AAAAAAAA");
determineCenterOfComponents();
ComponentMover mover =new ComponentMover();
addMouseListener(mover);
addMouseMotionListener(mover);
}
publicvoid paintComponent(final Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Point[] p;
g2.setStroke(new BasicStroke(4f));
for(int i = 0 ; i < order.size()-1; i++){
JLabel l1 = (JLabel)order.elementAt(i);
JLabel l2 = (JLabel)order.elementAt(i+1);
p = getCenterPoints(l1, l2);
g2.setColor(Color.black);
//g2.draw(new Line2D.Double(p[0], p[1]));
}
}
private Point[] getCenterPoints(Component c1, Component c2){
Pointp1 =new Point(),p2 =new Point();
Rectangler1 = c1.getBounds(),
r2 = c2.getBounds();
p1.x = r1.x + r1.width/2;
p1.y = r1.y + r1.height/2;
p2.x = r2.x + r2.width/2;
p2.y = r2.y + r2.height/2;
returnnew Point[]{p1, p2};
}
privatevoid determineCenterOfComponents(){
intxMin = Integer.MAX_VALUE, yMin = Integer.MAX_VALUE, xMax = 0,yMax = 0;
for(int i = 0; i < labels.length; i++){
Rectangle r = labels[i].getBounds();
if(r.x < xMin)xMin = r.x;
if(r.y < yMin)yMin = r.y;
if(r.x + r.width > xMax)xMax = r.x + r.width;
if(r.y + r.height > yMax)yMax = r.y + r.height;
}cx = xMin + (xMax - xMin)/2;
cy = yMin + (yMax - yMin)/2;
}
privateclass ComponentMoverextends MouseInputAdapter{
Point offsetP =new Point();
boolean dragging;
publicvoid mousePressed(MouseEvent e){
Point p = e.getPoint();
for(int i = 0; i < labels.length; i++){
Rectangle r = labels[i].getBounds();
if(r.contains(p)){
selectedLabel = labels[i];
order.addElement(labels[i]);
offsetP.x = p.x - r.x;
offsetP.y = p.y - r.y;
dragging =true;
repaint();//added
break;
}
}
}
publicvoid mouseReleased(MouseEvent e){}
publicvoid mouseDragged(MouseEvent e){
Rectangle r = selectedLabel.getBounds();
r.x = e.getX() - offsetP.x;
r.y = e.getY() - offsetP.y;
selectedLabel.setBounds(r.x, r.y, r.width, r.height);
//determineCenterOfComponents();
repaint();
}
}
privatevoid addLabels(){
label1 =new JLabel("Label 1");
label2 =new JLabel("Label 2");
label3 =new JLabel("Label 3");
label4 =new JLabel("Label 4");
labels =new JLabel[]{
label1, label2, label3, label4
};
//add(btn);
for(int i = 0; i < labels.length; i++){
labels[i].setHorizontalAlignment(SwingConstants.CENTER);
labels[i].setBorder(BorderFactory.createEtchedBorder());
add(labels[i]);
}
}
}
# 2
Thanks, according to your suggestion, I did following, not know why not work, not sure is correct way or not, please advice right way to solve it.
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.LineBorder;
import javax.swing.event.*;
public class DNDJLabels extends JPanel{
protected JLabel label1, label2, label3, label4;
protected JLabel[] labels;
protected JLabel selectedLabel;
protected Point offsetP = new Point();
protected boolean dragging;
LineBorder black = new LineBorder(Color.black, 3, false);
int cx, cy;
protected Vector order = new Vector();
public static void main(String[] args){
JFrame f = new JFrame("DNDJLabels");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new DNDJLabels());
f.setSize(600,700);
f.setLocation(200,200);
f.setVisible(true);
}
public DNDJLabels (){
setLayout(null);
addLabels();
label1.setBounds( 125, 150, 150, 60);
label2.setBounds(425, 150, 150, 60);
label3.setBounds( 125, 575, 150, 60);
label4.setBounds(425, 575, 150, 60);
label1.setBorder(black);
label2.setBorder(black);
label3.setBorder(black);
label4.setBorder(black);
//add(btn);
label1.setToolTipText("AAAAAAAA");
label1.addMouseListener(new MouseListener() {
public void mouseDown(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseDragged(MouseEvent e){
Rectangle r = selectedLabel.getBounds();
r.x = e.getX() - offsetP.x;
r.y = e.getY() - offsetP.y;
selectedLabel.setBounds(r.x, r.y, r.width, r.height);
//determineCenterOfComponents();
repaint();
}
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
dragging=true;
for(int i = 0; i < labels.length; i++){
Rectangle r = labels[i].getBounds();
if(r.contains(p)){
selectedLabel = labels[i];
order.addElement(labels[i]);
offsetP.x = p.x - r.x;
offsetP.y = p.y - r.y;
dragging = true;
repaint(); //added
break;
}
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseDoubleClick(MouseEvent e) {
}
});
determineCenterOfComponents();
ComponentMover mover = new ComponentMover();
addMouseListener(mover);
addMouseMotionListener(mover);
}
public void paintComponent(final Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Point[] p;
g2.setStroke(new BasicStroke(4f));
for(int i = 0 ; i < order.size()-1; i++) {
JLabel l1 = (JLabel)order.elementAt(i);
JLabel l2 = (JLabel)order.elementAt(i+1);
p = getCenterPoints(l1, l2);
g2.setColor(Color.black);
//g2.draw(new Line2D.Double(p[0], p[1]));
}
}
private Point[] getCenterPoints(Component c1, Component c2){
Pointp1 = new Point(),p2 = new Point();
Rectangler1 = c1.getBounds(),
r2 = c2.getBounds();
p1.x = r1.x + r1.width/2;
p1.y = r1.y + r1.height/2;
p2.x = r2.x + r2.width/2;
p2.y = r2.y + r2.height/2;
return new Point[] {p1, p2};
}
private void determineCenterOfComponents(){
intxMin = Integer.MAX_VALUE, yMin = Integer.MAX_VALUE, xMax = 0,yMax = 0;
for(int i = 0; i < labels.length; i++){
Rectangle r = labels[i].getBounds();
if(r.x < xMin)xMin = r.x;
if(r.y < yMin)yMin = r.y;
if(r.x + r.width > xMax)xMax = r.x + r.width;
if(r.y + r.height > yMax)yMax = r.y + r.height;
}cx = xMin + (xMax - xMin)/2;
cy = yMin + (yMax - yMin)/2;
}
private class ComponentMover extends MouseInputAdapter{
public void mousePressed(MouseEvent e){
Point p = e.getPoint();
for(int i = 0; i < labels.length; i++){
Rectangle r = labels[i].getBounds();
if(r.contains(p)){
selectedLabel = labels[i];
order.addElement(labels[i]);
offsetP.x = p.x - r.x;
offsetP.y = p.y - r.y;
dragging = true;
repaint(); //added
break;
}
}
}
public void mouseReleased(MouseEvent e){ }
public void mouseDragged(MouseEvent e){
Rectangle r = selectedLabel.getBounds();
r.x = e.getX() - offsetP.x;
r.y = e.getY() - offsetP.y;
selectedLabel.setBounds(r.x, r.y, r.width, r.height);
//determineCenterOfComponents();
repaint();
}
}
private void addLabels(){
label1 = new JLabel("Label 1");
label2 = new JLabel("Label 2");
label3 = new JLabel("Label 3");
label4 = new JLabel("Label 4");
labels = new JLabel[] {
label1, label2, label3, label4
};
//add(btn);
for(int i = 0; i < labels.length; i++) {
labels[i].setHorizontalAlignment(SwingConstants.CENTER);
labels[i].setBorder(BorderFactory.createEtchedBorder());
add(labels[i]);
}
}
}