|
|
@ -9,6 +9,7 @@ import javax.swing.*; |
|
|
|
import javax.swing.event.ChangeEvent; |
|
|
|
import javax.swing.event.ChangeEvent; |
|
|
|
import javax.swing.event.ChangeListener; |
|
|
|
import javax.swing.event.ChangeListener; |
|
|
|
import java.awt.*; |
|
|
|
import java.awt.*; |
|
|
|
|
|
|
|
import java.awt.event.AWTEventListener; |
|
|
|
import java.awt.event.MouseAdapter; |
|
|
|
import java.awt.event.MouseAdapter; |
|
|
|
import java.awt.event.MouseEvent; |
|
|
|
import java.awt.event.MouseEvent; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.ArrayList; |
|
|
@ -35,25 +36,16 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
showPopupMenu(); |
|
|
|
showPopupMenu(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void mouseExited(MouseEvent evt) { |
|
|
|
|
|
|
|
int x= evt.getXOnScreen();//mac和widows的计算结果还不一样
|
|
|
|
}; |
|
|
|
int y = evt.getYOnScreen(); |
|
|
|
|
|
|
|
if (selectPopupWindow != null) { |
|
|
|
AWTEventListener awt = new AWTEventListener() { |
|
|
|
Rectangle rectangle = selectPopupWindow.getBounds(); |
|
|
|
public void eventDispatched(AWTEvent event) { |
|
|
|
boolean b1 = x < rectangle.x - GAP || x > rectangle.x + rectangle.width + GAP; |
|
|
|
if (event instanceof MouseEvent) { |
|
|
|
boolean b2 = y < rectangle.y - GAP || y >rectangle.y + rectangle.height + GAP; |
|
|
|
MouseEvent evt = (MouseEvent) event; |
|
|
|
if(b1 || b2) { |
|
|
|
if (evt.getClickCount() > 0) { |
|
|
|
hidePopupMenu(); |
|
|
|
mouseClick(evt); |
|
|
|
} |
|
|
|
} |
|
|
|
// if (OperatingSystem.isWindows()) {
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// }else{
|
|
|
|
|
|
|
|
// Point pp = SwingUtilities.convertPoint(evt.getComponent(), evt.getPoint(), selectPopupWindow.getParent());
|
|
|
|
|
|
|
|
// Rectangle rectangle = selectPopupWindow.getBounds();
|
|
|
|
|
|
|
|
// if (pp.getY() < rectangle.getY() || pp.getY() > rectangle.getY() + rectangle.getHeight()) {
|
|
|
|
|
|
|
|
// //hidePopupMenu();
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
@ -67,6 +59,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
if (!this.isEnabled()) { |
|
|
|
if (!this.isEnabled()) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Toolkit.getDefaultToolkit().addAWTEventListener(awt, AWTEvent.MOUSE_EVENT_MASK); |
|
|
|
|
|
|
|
|
|
|
|
selectPopupWindow = this.getControlWindow(); |
|
|
|
selectPopupWindow = this.getControlWindow(); |
|
|
|
|
|
|
|
|
|
|
@ -83,7 +76,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
y = y - selectPopupWindow.getHeight() - GAP2;// 超过屏幕高度了
|
|
|
|
y = y - selectPopupWindow.getHeight() - GAP2;// 超过屏幕高度了
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(width > screenSize.width) { |
|
|
|
if (width > screenSize.width) { |
|
|
|
x = screenSize.width - selectPopupWindow.getWidth(); |
|
|
|
x = screenSize.width - selectPopupWindow.getWidth(); |
|
|
|
} |
|
|
|
} |
|
|
|
selectPopupWindow.setLocation(x, y); |
|
|
|
selectPopupWindow.setLocation(x, y); |
|
|
@ -105,9 +98,10 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
private void mouseClick(MouseEvent evt) { |
|
|
|
private void mouseClick(MouseEvent evt) { |
|
|
|
int x = evt.getLocationOnScreen().x; |
|
|
|
int x = evt.getLocationOnScreen().x; |
|
|
|
int y = evt.getLocationOnScreen().y; |
|
|
|
int y = evt.getLocationOnScreen().y; |
|
|
|
|
|
|
|
Rectangle popBoxRect = AbstractPopBox.this.getBounds(); |
|
|
|
Rectangle rectangle = this.getControlWindow().getBounds(); |
|
|
|
Rectangle rectangle = this.getControlWindow().getBounds(); |
|
|
|
boolean b1 = x < rectangle.x || x > rectangle.x + rectangle.width; |
|
|
|
boolean b1 = x < rectangle.x || x > rectangle.x + rectangle.width; |
|
|
|
boolean b2 = y < rectangle.y || y > rectangle.y + rectangle.height; |
|
|
|
boolean b2 = y < rectangle.y - popBoxRect.height || y > rectangle.y + rectangle.height; |
|
|
|
if (b1 || b2) { |
|
|
|
if (b1 || b2) { |
|
|
|
this.hidePopupMenu(); |
|
|
|
this.hidePopupMenu(); |
|
|
|
} |
|
|
|
} |
|
|
@ -119,6 +113,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
selectPopupWindow = null; |
|
|
|
selectPopupWindow = null; |
|
|
|
|
|
|
|
Toolkit.getDefaultToolkit().removeAWTEventListener(awt); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
protected JWindow getControlWindow() { |
|
|
|
protected JWindow getControlWindow() { |
|
|
@ -152,6 +147,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 添加事件 |
|
|
|
* 添加事件 |
|
|
|
|
|
|
|
* |
|
|
|
* @param changeListener 事件 |
|
|
|
* @param changeListener 事件 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void addSelectChangeListener(ChangeListener changeListener) { |
|
|
|
public void addSelectChangeListener(ChangeListener changeListener) { |
|
|
@ -160,6 +156,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 删除事件 |
|
|
|
* 删除事件 |
|
|
|
|
|
|
|
* |
|
|
|
* @param changeListener 事件 |
|
|
|
* @param changeListener 事件 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void removeSelectChangeListener(ChangeListener changeListener) { |
|
|
|
public void removeSelectChangeListener(ChangeListener changeListener) { |
|
|
@ -180,6 +177,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 待说明 |
|
|
|
* 待说明 |
|
|
|
|
|
|
|
* |
|
|
|
* @param background 背景 |
|
|
|
* @param background 背景 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public void fireDisplayComponent(Background background) { |
|
|
|
public void fireDisplayComponent(Background background) { |
|
|
@ -192,6 +190,7 @@ public abstract class AbstractPopBox extends JPanel { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 初始化弹出框的面板 |
|
|
|
* 初始化弹出框的面板 |
|
|
|
|
|
|
|
* |
|
|
|
* @param preWidth 宽度 |
|
|
|
* @param preWidth 宽度 |
|
|
|
* @return 弹出面板 |
|
|
|
* @return 弹出面板 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|