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

