How to make multiple selection?

Hello,

I have following code, I can make each single label to be clicked and selected. but I hope if I press and hold Alt key, then I can make any number of labels selectable.

So far I ahev no clue to do it, Can any guru advice how to do that?

thanks

package aaaText;

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import java.util.Vector;

import javax.swing.*;

import javax.swing.event.*;

publicclass MultipleSelectJLabelsextends JPanel

{

protected JLabel label1, label2, label3, label4;

protected JLabel[] labels;

protected JLabel selectedLabel;

protected JPanel group =newJPanel();

protected JButton btn =new JButton("Draw Lines");

protected JButton btn1 =new JButton("No Draw");

protected JButton btn2 =new JButton("Group");

protectedboolean gp =false;

int cx, cy;

protected Vector order =new Vector();

publicstaticvoid main(String[] args)

{

JFrame f =new JFrame("Connecting Lines");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getContentPane().add(new MultipleSelectJLabels());

f.setSize(600,700);

f.setLocation(200,200);

f.setVisible(true);

}

private MouseListener ml =new MouseAdapter(){

publicvoid mousePressed(MouseEvent e){

Point p = e.getPoint();

JPanel jp =new JPanel();

Component[] c = ((JPanel)e.getSource()).getComponents();

System.out.println("c.length = " + c.length);

for(int j = 0; j < c.length; j++){

if(c[j].getBounds().contains(p)){

if(selectedLabel !=null && selectedLabel != (JLabel)c[j])

selectedLabel.setBorder(BorderFactory.createEtchedBorder());

selectedLabel = (JLabel)c[j];

System.out.println("selectedLabel = " + selectedLabel.getText());

selectedLabel.setBorder(BorderFactory.createLineBorder(Color.green));

System.out.println("2. group button is pressed gp= " + gp);

// Now that you know which label the user has selected with the

// mouse you can get its properties and send them to the other

// panel for display.

if(gp){

remove(selectedLabel);

jp.add(selectedLabel);

System.out.println("3. selectedLabel was added into JP= " + selectedLabel.getText());

}

break;

}

add(jp);

}

}

};

public MultipleSelectJLabels ()

{

setLayout(null);

addLabels();

label1.setBounds( 125, 150, 125, 25);

label2.setBounds(425, 150, 125, 25);

label3.setBounds( 125, 575, 125, 25);

label4.setBounds(425, 575, 125, 25);

//add(btn);

btn.setBounds(10, 5, 105, 25);

btn1.setBounds(105, 5, 105, 25);

btn2.setBounds(205, 5, 105, 25);

add(btn);

add(btn1);

add(btn2);

determineCenterOfComponents();

ComponentMover mover =new ComponentMover();

ActionListener lst =new ActionListener(){

publicvoid actionPerformed(ActionEvent e){

ComponentMover mover =new ComponentMover();

addMouseListener(mover);

addMouseMotionListener(mover);

}

};

ActionListener lst1 =new ActionListener(){

publicvoid actionPerformed(ActionEvent e){

}

};

ActionListener group =new ActionListener(){

publicvoid actionPerformed(ActionEvent e){

gp=true;

System.out.println("group button is pressed gp= " + gp);

}

};

btn.addActionListener(lst);

btn1.addActionListener(lst1);

btn2.addActionListener(group);

addMouseListener(ml);

}

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)

{

Point

p1 =new Point(),

p2 =new Point();

Rectangle

r1 = 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()

{

int

xMin = 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)

{

dragging =false;

}

publicvoid mouseDragged(MouseEvent e)

{

if(dragging)

{

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]);

}

}

}

Thanks

[12327 byte] By [nissannissana] at [2007-11-27 6:38:34]
# 1
Quick question: "Any reason why don't want to use a JList instead of trying to re-invent the wheel of component selection using JLabels?"
icewalker2ga at 2007-7-12 18:07:16 > top of Java-index,Desktop,Core GUI APIs...