Note that there are some explanatory texts on larger screens.

plurals
  1. POJInternalFrames to listen to JDesktopPane events
    primarykey
    data
    text
    <p>Is there any easy way to have my jinternalframes be the best of both worlds</p> <ul> <li>embedded when I want them to act as part of jdesktoppane</li> <li>also movable and able to handle their own events</li> </ul> <p><img src="https://i.stack.imgur.com/zdw7D.png" alt="enter image description here"></p> <p>Hopefully this picture will help out. Right now I have my code to drag the item to your player and it inserts into next available backpack slot, but I also want to be able to drag it to any of the backpack slots, but as you can see it paints below. Is there any quick and dirty way to remedy this? My JDesktopPane has a panel on top that is where everything is painted to(besides the jinternalframes of course). Sorry for all of the code and no SSCCEE. Just felt it would better to show my logic.</p> <pre><code>theDesktop.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseDragged(MouseEvent e) { updateMouseCursor(e); if (MapGamePanel.draggingItem){ Point point = e.getPoint(); MapGamePanel.currentX = point.x; MapGamePanel.currentY = point.y; } } @Override public void mouseMoved(MouseEvent e) { updateMouseCursor(e); } }); theDesktop.addMouseListener(new MouseListener() { @Override public void mousePressed(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1){ //left int whiteLeftSpace = (theDesktop.getWidth() - xTiles*32)/2; boolean inGamePanel = e.getX() &gt; whiteLeftSpace &amp;&amp; e.getX() &lt; (xTiles*32 + whiteLeftSpace) &amp;&amp; e.getY() &lt; yTiles*32; String globalCoords = localToGlobalCoords((e.getX()-whiteLeftSpace)/32 + "," + e.getY()/32); if (inGamePanel){ //looking for tiles with no mobs or players and loot String[] globalCoordsSplit = globalCoords.split(","); int globalX = Integer.parseInt(globalCoordsSplit[0]); int globalY = Integer.parseInt(globalCoordsSplit[1]); if ((!(globalX == characterX &amp;&amp; globalY == characterY)) &amp;&amp; //not under character ((globalX-1) == characterX || globalX == characterX || (globalX+1) == characterX) &amp;&amp; //(+/-) 1 xTile ((globalY-1) == characterY || globalY == characterY || (globalY+1) == characterY)){ //(+/-) 1 yTile HashMap &lt;String, String&gt; dropsToDrag = new HashMap &lt;String, String&gt;(); Boolean mobPresent = false; Boolean playerPresent = false; if (MapGamePanel.entityInfoHashTable.containsKey(globalCoords)){ //no mobs/npcs mobPresent = true; } Iterator&lt;Entry&lt;String, String&gt;&gt; it = MapGamePanel.entityInfoHashTable.entrySet().iterator(); while (it.hasNext()) { Entry&lt;String, String&gt; pairs = it.next(); String key = pairs.getKey(); if (!key.contains(",") &amp;&amp; !key.contains("-")){ String[] values = pairs.getValue().split("\\|"); String tempCoords = values[0]; if (globalCoords.equals(tempCoords)){ //player on spot playerPresent = true; } } else if (key.contains("-")){ String[] splitKey = key.split("-"); if (splitKey[0].equals(globalCoords)){ dropsToDrag.put(key, pairs.getValue()); } } } int smallEntityId = Integer.MAX_VALUE; //2147483647 if (!mobPresent &amp;&amp; !playerPresent &amp;&amp; !dropsToDrag.isEmpty()){ Iterator&lt;Entry&lt;String, String&gt;&gt; it2 = dropsToDrag.entrySet().iterator(); while (it2.hasNext()) { Entry&lt;String, String&gt; pairs = it2.next(); String[] keyWithPK = pairs.getKey().split("-"); String tmpCoords = keyWithPK[0]; String[] coordsSplit = tmpCoords.split(","); int tempX = Integer.parseInt(coordsSplit[0]); int tempY = Integer.parseInt(coordsSplit[1]); int tmpEntityId = Integer.parseInt(keyWithPK[1]); String[] values = pairs.getValue().split("\\|"); String tmpId = values[0]; int tmploot_amt = Integer.parseInt(values[1]); String tmploot_filename = values[2]; if (tmpEntityId &lt; smallEntityId){ smallEntityId = tmpEntityId; MapGamePanel.dragItemXCoord = tempX; MapGamePanel.dragItemYCoord = tempY; MapGamePanel.dragItemEntityId = tmpEntityId; MapGamePanel.dragItemId = tmpId; MapGamePanel.dragItemAmt = tmploot_amt; MapGamePanel.draggingItemFilename = tmploot_filename; } } MapGamePanel.draggingItem = true; Point point = e.getPoint(); MapGamePanel.startX = point.x; MapGamePanel.startY = point.y; } } } } } @Override public void mouseReleased(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3){ //right movementBitKeys.keyReleased(87); movementBitKeys.keyReleased(68); movementBitKeys.keyReleased(83); movementBitKeys.keyReleased(65); mouseHeld = false; } if (MapGamePanel.draggingItem){ int whiteLeftSpace = (theDesktop.getWidth() - xTiles*32)/2; String[] globalCoords = localToGlobalCoords((MapGamePanel.currentX-whiteLeftSpace)/32 + "," + MapGamePanel.currentY/32).split(","); int globalX = Integer.parseInt(globalCoords[0]); int globalY = Integer.parseInt(globalCoords[1]); String[] startCoords = localToGlobalCoords((MapGamePanel.startX-whiteLeftSpace)/32 + "," + MapGamePanel.startY/32).split(","); int startX = Integer.parseInt(startCoords[0]); int startY = Integer.parseInt(startCoords[1]); if (globalX == characterX &amp;&amp; globalY == characterY){ sendToServer("pickupItem|" + startX + "," + startY + "-" + MapGamePanel.dragItemEntityId + "|backpack|-1|" + MapGamePanel.dragItemAmt); } else if (((globalX-1) == characterX || globalX == characterX || (globalX+1) == characterX) &amp;&amp; ((globalY-1) == characterY || globalY == characterY || (globalY+1) == characterY)){ if (!(startX == globalX &amp;&amp; startY == globalY)){ sendToServer("moveItem|" + startX + "," + startY + "-" + MapGamePanel.dragItemEntityId + "|ground|" + globalX + "," + globalY + "|-1|" + MapGamePanel.dragItemAmt); } } MapGamePanel.draggingItem = false; } } @Override public void mouseClicked(MouseEvent e) {} @Override public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} }); </code></pre> <p>}</p> <p><strong>EDIT</strong> where I mess around with JLayeredPane due to the suggestions.</p> <pre><code>public static JFrame frame; public static JLayeredPane theDesktop; public static MapGamePanel gamePanel; //where all my game tiles draw ....//lines removed theDesktop = new JDesktopPane(); theDesktop.setOpaque(false); theDesktop.add(backpackFrame, JLayeredPane.DEFAULT_LAYER); theDesktop.add(gamePanel, JLayeredPane.DEFAULT_LAYER); theDesktop.add(new JLabel("THIS SHOULD SHOW UP ABOVE THE OTHER CRAP, but does not"), JLayeredPane.DRAG_LAYER); ....//lots of lines removed frame.getContentPane().add(theDesktop); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload