Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BasicInternalFrameUI ui = (BasicInternalFrameUI) internalFrame.getUI();
- final Component northPane = ui.getNorthPane();
- import java.awt.BorderLayout;
- import java.awt.Color;
- import javax.swing.plaf.basic.*;
- import javax.swing.*;
- import java.awt.Component;
- import java.awt.Cursor;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.Point;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.util.ArrayList;
- import java.awt.event.*;
- import java.awt.geom.Ellipse2D;
- import java.awt.geom.Line2D;
- import java.awt.geom.Point2D;
- public class MiDesktopPane extends JDesktopPane{
- private ArrayList<JInternalFrame> frames;
- private Peer inicioLinea,finLinea;
- private boolean [][] uniones;
- public MiDesktopPane(){
- setBackground(new Color(255,255,255,255));
- frames = new ArrayList<>();
- inicioLinea = finLinea = null;
- uniones = new boolean[15][15];
- //Se inicia la matriz para uniones de peers
- for(int i=0; i<15;i++){
- for(int j=0; j<15;j++){
- uniones[i][j] = false;
- }
- }
- this.revalidate();
- this.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e){
- //System.out.println("Clic de Desktop: "+e.getX()+" y "+e.getY());
- final Peer internalFrame = new Peer(e.getX(), e.getY());
- frames.add(internalFrame);
- add(internalFrame);
- internalFrame.addComponentListener(new ComponentAdapter() {
- @Override
- public void componentMoved(ComponentEvent e){
- repaint();
- }
- });
- BasicInternalFrameUI ui = (BasicInternalFrameUI) internalFrame.getUI();
- final Component northPane = ui.getNorthPane();
- northPane.addMouseListener(new MouseAdapter(){
- @Override
- public void mouseClicked(MouseEvent e2){
- if(inicioLinea == null && finLinea == null){
- inicioLinea = internalFrame;
- }else{
- if(finLinea == null && inicioLinea != null){
- finLinea = internalFrame;
- //Se llama a funcion agregar union
- addPeerComunication();
- }
- }
- repaint();
- }
- /*Si no se pudiera mover el IF se usarian estos metodos para unirse entre ellos
- @Override
- public void mousePressed(MouseEvent evento)
- {
- Point2D x = evento.getPoint();
- System.out.println("Presionado en barra");
- }
- @Override
- public void mouseReleased(MouseEvent evento)
- {
- Point2D x = evento.getPoint();
- System.out.println("Soltado en barra");
- }
- */
- });
- //Funcion para que reaccion el cursor a la manita
- northPane.addMouseMotionListener(new MouseMotionAdapter(){
- @Override
- public void mouseMoved(MouseEvent e3){
- //System.out.println("Mouse movido: "+e3.getPoint());
- //System.out.println(""+northPane.getBounds());
- Point2D pun = (Point2D) e3.getPoint();
- if(northPane.getBounds().contains(e3.getPoint())){
- northPane.setCursor(new Cursor(Cursor.HAND_CURSOR));
- }
- repaint();
- }
- @Override
- public void mouseDragged(MouseEvent e2){
- Point2D pun = (Point2D) e2.getPoint();
- repaint();
- }
- });
- //Se deshabilita drag de Internals (que es automático pero no detectable)
- /*
- JInternalFrame[] frames = getAllFrames();
- for (JInternalFrame frame: frames) {
- //BasicInternalFrameUI ui = (BasicInternalFrameUI) frame.getUI();
- //Component northPane = ui.getNorthPane();
- MouseMotionListener[] motionListeners = (MouseMotionListener[]) northPane.getListeners(MouseMotionListener.class);
- for (MouseMotionListener listener: motionListeners){
- //Este remueve el drag automático y le ponemos uno creado por nosotros.
- //northPane.removeMouseMotionListener(listener);
- }
- }*/
- internalFrame.setVisible(true);
- repaint();
- }
- }
- );
- }
- public void addPeerComunication(){
- if(uniones[inicioLinea.getMiNoPeer()][finLinea.getMiNoPeer()] == false){
- if(inicioLinea.getMiNoPeer() != finLinea.getMiNoPeer()){
- int menor, mayor; menor = mayor = 0;
- //Aqui se reduce solo a la matriz triangular superior
- if(inicioLinea.getMiNoPeer() < finLinea.getMiNoPeer()){
- menor = inicioLinea.getMiNoPeer();
- mayor = finLinea.getMiNoPeer();
- }else{
- mayor = inicioLinea.getMiNoPeer();
- menor = finLinea.getMiNoPeer();}
- //Antes preguntar con JOptionPane si se desea aniadir union
- int valorRespuesta =
- JOptionPane.showConfirmDialog(this,
- "¿Desea unir el Peer "+menor+" con el Peer "+mayor, "Confirma la unión", JOptionPane.YES_NO_CANCEL_OPTION);
- if(valorRespuesta == JOptionPane.YES_OPTION){
- uniones[menor][mayor] = true;
- this.repaint();
- }
- }else{/*System.out.println("No se puede establecer comunicacion con uno mismo");*/}
- inicioLinea = finLinea = null;
- }
- }
- @Override
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2 = (Graphics2D) g;
- g2.setColor(Color.black);
- for(int i=0; i<15;i++){
- for(int j=i; j<15; j++){
- //Este If grande sirve para no mostrar lineas cuando se cierra
- //Uno o mas JInternalFrames a los que esta conectado
- //Incluso si se minimiza se cierra la linea
- if(uniones[i][j] &&
- (!frames.get(i).isClosed() && !frames.get(j).isClosed())
- && (!frames.get(i).isIcon() && !frames.get(j).isIcon())){
- Point2D p1,p2;
- p1 = new Point2D.Double(frames.get(i).getBounds().getCenterX(),frames.get(i).getBounds().getCenterY());
- p2 = new Point2D.Double(frames.get(j).getBounds().getCenterX(),frames.get(j).getBounds().getCenterY());
- g2.draw(new Line2D.Double(p1, p2));
- }else{repaint();}
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment