Point () { calculateSelectedTextRectangle(); int dialogWidth = getSize().width; int dialogHeight = getSize().height; int spaceIfPlacedOnTheRight = myEditorComponentWidth - (myTextRangeMaxColumnX + dialogWidth); Integer dialogX = null; Integer dialogY = null; if (spaceIfPlacedOnTheRight > 0) { int paddingFromText = spaceIfPlacedOnTheRight > PREFERRED_PADDING ? PREFERRED_PADDING : (spaceIfPlacedOnTheRight / 2); dialogX = myTextRangeMaxColumnX + paddingFromText; if (mySelectionEndY - mySelectionStartY > dialogHeight) { dialogY = (myEditorComponentHeight - dialogHeight) / 2; } else { dialogY = getYMatchingDialogAndSelectionCenter(dialogHeight); } } else if (mySelectionStartY > dialogHeight) { dialogX = (myEditorComponentWidth - dialogWidth) / 2; dialogY = mySelectionStartY - dialogHeight; } else if (mySelectionEndY + dialogHeight < myEditorComponentHeight) { dialogX = (myEditorComponentWidth - dialogWidth) / 2; dialogY = mySelectionEndY; } if (dialogX != null && dialogY != null) { Point location = new Point(dialogX, dialogY); SwingUtilities.convertPointToScreen(location, myEditor.getComponent()); return location; } return null; }