Guest User

Untitled

a guest
Oct 19th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.59 KB | None | 0 0
  1. BasicInternalFrameUI ui = (BasicInternalFrameUI) internalFrame.getUI();
  2. final Component northPane = ui.getNorthPane();
  3.  
  4. import java.awt.BorderLayout;
  5. import java.awt.Color;
  6. import javax.swing.plaf.basic.*;
  7. import javax.swing.*;
  8. import java.awt.Component;
  9. import java.awt.Cursor;
  10. import java.awt.Graphics;
  11. import java.awt.Graphics2D;
  12. import java.awt.Point;
  13. import java.awt.event.MouseAdapter;
  14. import java.awt.event.MouseEvent;
  15. import java.util.ArrayList;
  16. import java.awt.event.*;
  17. import java.awt.geom.Ellipse2D;
  18. import java.awt.geom.Line2D;
  19. import java.awt.geom.Point2D;
  20.  
  21. public class MiDesktopPane extends JDesktopPane{
  22. private ArrayList<JInternalFrame> frames;
  23. private Peer inicioLinea,finLinea;
  24. private boolean [][] uniones;
  25.  
  26. public MiDesktopPane(){
  27.  
  28. setBackground(new Color(255,255,255,255));
  29.  
  30. frames = new ArrayList<>();
  31.  
  32. inicioLinea = finLinea = null;
  33. uniones = new boolean[15][15];
  34.  
  35. //Se inicia la matriz para uniones de peers
  36. for(int i=0; i<15;i++){
  37. for(int j=0; j<15;j++){
  38. uniones[i][j] = false;
  39. }
  40. }
  41.  
  42. this.revalidate();
  43.  
  44. this.addMouseListener(new MouseAdapter() {
  45. @Override
  46. public void mouseClicked(MouseEvent e){
  47. //System.out.println("Clic de Desktop: "+e.getX()+" y "+e.getY());
  48. final Peer internalFrame = new Peer(e.getX(), e.getY());
  49.  
  50. frames.add(internalFrame);
  51. add(internalFrame);
  52.  
  53. internalFrame.addComponentListener(new ComponentAdapter() {
  54. @Override
  55. public void componentMoved(ComponentEvent e){
  56. repaint();
  57. }
  58. });
  59.  
  60. BasicInternalFrameUI ui = (BasicInternalFrameUI) internalFrame.getUI();
  61. final Component northPane = ui.getNorthPane();
  62.  
  63. northPane.addMouseListener(new MouseAdapter(){
  64. @Override
  65. public void mouseClicked(MouseEvent e2){
  66. if(inicioLinea == null && finLinea == null){
  67. inicioLinea = internalFrame;
  68. }else{
  69. if(finLinea == null && inicioLinea != null){
  70. finLinea = internalFrame;
  71. //Se llama a funcion agregar union
  72. addPeerComunication();
  73. }
  74. }
  75. repaint();
  76. }
  77.  
  78. /*Si no se pudiera mover el IF se usarian estos metodos para unirse entre ellos
  79. @Override
  80. public void mousePressed(MouseEvent evento)
  81. {
  82. Point2D x = evento.getPoint();
  83. System.out.println("Presionado en barra");
  84. }
  85.  
  86. @Override
  87. public void mouseReleased(MouseEvent evento)
  88. {
  89. Point2D x = evento.getPoint();
  90. System.out.println("Soltado en barra");
  91. }
  92. */
  93. });
  94.  
  95. //Funcion para que reaccion el cursor a la manita
  96. northPane.addMouseMotionListener(new MouseMotionAdapter(){
  97. @Override
  98. public void mouseMoved(MouseEvent e3){
  99. //System.out.println("Mouse movido: "+e3.getPoint());
  100. //System.out.println(""+northPane.getBounds());
  101. Point2D pun = (Point2D) e3.getPoint();
  102. if(northPane.getBounds().contains(e3.getPoint())){
  103. northPane.setCursor(new Cursor(Cursor.HAND_CURSOR));
  104. }
  105. repaint();
  106. }
  107.  
  108. @Override
  109. public void mouseDragged(MouseEvent e2){
  110. Point2D pun = (Point2D) e2.getPoint();
  111.  
  112. repaint();
  113. }
  114. });
  115.  
  116. //Se deshabilita drag de Internals (que es automático pero no detectable)
  117. /*
  118. JInternalFrame[] frames = getAllFrames();
  119. for (JInternalFrame frame: frames) {
  120. //BasicInternalFrameUI ui = (BasicInternalFrameUI) frame.getUI();
  121. //Component northPane = ui.getNorthPane();
  122. MouseMotionListener[] motionListeners = (MouseMotionListener[]) northPane.getListeners(MouseMotionListener.class);
  123. for (MouseMotionListener listener: motionListeners){
  124. //Este remueve el drag automático y le ponemos uno creado por nosotros.
  125. //northPane.removeMouseMotionListener(listener);
  126. }
  127. }*/
  128. internalFrame.setVisible(true);
  129. repaint();
  130. }
  131. }
  132. );
  133. }
  134.  
  135. public void addPeerComunication(){
  136. if(uniones[inicioLinea.getMiNoPeer()][finLinea.getMiNoPeer()] == false){
  137. if(inicioLinea.getMiNoPeer() != finLinea.getMiNoPeer()){
  138. int menor, mayor; menor = mayor = 0;
  139. //Aqui se reduce solo a la matriz triangular superior
  140. if(inicioLinea.getMiNoPeer() < finLinea.getMiNoPeer()){
  141. menor = inicioLinea.getMiNoPeer();
  142. mayor = finLinea.getMiNoPeer();
  143. }else{
  144. mayor = inicioLinea.getMiNoPeer();
  145. menor = finLinea.getMiNoPeer();}
  146. //Antes preguntar con JOptionPane si se desea aniadir union
  147. int valorRespuesta =
  148. JOptionPane.showConfirmDialog(this,
  149. "¿Desea unir el Peer "+menor+" con el Peer "+mayor, "Confirma la unión", JOptionPane.YES_NO_CANCEL_OPTION);
  150. if(valorRespuesta == JOptionPane.YES_OPTION){
  151. uniones[menor][mayor] = true;
  152. this.repaint();
  153. }
  154. }else{/*System.out.println("No se puede establecer comunicacion con uno mismo");*/}
  155. inicioLinea = finLinea = null;
  156. }
  157. }
  158.  
  159.  
  160. @Override
  161. protected void paintComponent(Graphics g) {
  162. super.paintComponent(g);
  163. Graphics2D g2 = (Graphics2D) g;
  164.  
  165. g2.setColor(Color.black);
  166. for(int i=0; i<15;i++){
  167. for(int j=i; j<15; j++){
  168. //Este If grande sirve para no mostrar lineas cuando se cierra
  169. //Uno o mas JInternalFrames a los que esta conectado
  170. //Incluso si se minimiza se cierra la linea
  171. if(uniones[i][j] &&
  172. (!frames.get(i).isClosed() && !frames.get(j).isClosed())
  173. && (!frames.get(i).isIcon() && !frames.get(j).isIcon())){
  174. Point2D p1,p2;
  175. p1 = new Point2D.Double(frames.get(i).getBounds().getCenterX(),frames.get(i).getBounds().getCenterY());
  176. p2 = new Point2D.Double(frames.get(j).getBounds().getCenterX(),frames.get(j).getBounds().getCenterY());
  177. g2.draw(new Line2D.Double(p1, p2));
  178. }else{repaint();}
  179. }
  180. }
  181. }
  182. }
Add Comment
Please, Sign In to add comment