Skip to content

Commit fedc913

Browse files
hansonrhansonr
authored andcommitted
fixes add/remove for popup menu
1 parent 09f29a1 commit fedc913

File tree

9 files changed

+81
-30
lines changed

9 files changed

+81
-30
lines changed
-418 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181120230421
1+
20181121123334
-418 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181120230421
1+
20181121123334
-418 Bytes
Binary file not shown.

sources/net.sf.j2s.java.core/src/swingjs/jquery/j2sMenu.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ Swing.__getMenuStyle = function(applet) { return '\
125125
.swingjsPopupMenu .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;position:absolute;top:.2em;left:.2em}\
126126
.swingjsPopupMenu .ui-menu-icon{position:static;float:right}\
127127
.swingjsPopupMenu .ui-icon-carat-1-e{min-width:10ex;text-align:right;background-image:none;background-position:0 0}\
128-
.swingjsPopupMenu .ui-icon-carat-1-e:after{content:"\\0023F5"}\
128+
.swingjsPopupMenu .ui-icon-carat-1-e:after{content:"\\0025B6"}\
129129
.swingjsPopupMenu .ui-state-default{border:1px solid #c5dbec;background:#dfeffc;color:#2e6e9e}\
130130
.swingjsPopupMenu .ui-state-default a{color:#2e6e9e;text-decoration:none}\
131131
.swingjsPopupMenu .ui-state-hover,.swingjsPopupMenu .ui-state-focus{border:1px solid #79b7e7;background:#d0e5f5;color:#1d5987}\

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSMenuUI.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import javax.swing.JComponent;
99
import javax.swing.JMenu;
1010
import swingjs.api.js.DOMNode;
11-
public class JSMenuUI extends JSMenuItemUI implements ContainerListener {
12-
11+
public class JSMenuUI extends JSMenuItemUI {
12+
1313
private JMenu jm;
1414

1515
public JSMenuUI() {
@@ -76,8 +76,6 @@ public boolean handleJSEvent(Object target, int eventType, Object jQueryEvent) {
7676
public void installUI(JComponent jc) {
7777
jm = (JMenu) jc;
7878
super.installUI(jc);
79-
// handle add/remove
80-
jm.getPopupMenu().addContainerListener(this);
8179
}
8280

8381
@Override
@@ -91,22 +89,4 @@ public Dimension getMaximumSize() {
9189
return getPreferredSize();
9290
}
9391

94-
@Override
95-
public void componentAdded(ContainerEvent e) {
96-
JSPopupMenuUI popupui = (JSPopupMenuUI) jm.getPopupMenu().getUI();
97-
// OK, the idea here is that we detach all child nodes
98-
// and then reattach them.
99-
DOMNode.detachAll(popupui.outerNode);
100-
popupui.setTainted();
101-
popupui.setHTMLElement();
102-
}
103-
104-
@Override
105-
public void componentRemoved(ContainerEvent e) {
106-
JSPopupMenuUI popupui = (JSPopupMenuUI) jm.getPopupMenu().getUI();
107-
DOMNode.detachAll(popupui.outerNode);
108-
popupui.setTainted();
109-
popupui.setHTMLElement();
110-
}
111-
11292
}

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSPopupMenuUI.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import java.awt.Dimension;
55
import java.awt.event.ComponentEvent;
66
import java.awt.event.ComponentListener;
7+
import java.awt.event.ContainerEvent;
8+
import java.awt.event.ContainerListener;
79

810
import javax.swing.JComponent;
911
import javax.swing.JPopupMenu;
@@ -13,17 +15,35 @@
1315
import swingjs.jquery.JQueryUI;
1416
import swingjs.api.js.DOMNode;
1517

16-
public class JSPopupMenuUI extends JSPanelUI {
18+
public class JSPopupMenuUI extends JSPanelUI implements ContainerListener {
19+
1720

1821
static {
1922
Object jqueryui = JQueryUI.class; // loads jQuery.ui
2023
}
2124

2225
// a frameless independent window
2326

24-
static JSSwingMenu j2sSwingMenu;
27+
private static JSSwingMenu j2sSwingMenu;
2528

26-
int timer;
29+
30+
@Override
31+
public void componentAdded(ContainerEvent e) {
32+
// OK, the idea here is that we detach all child nodes
33+
// and then reattach them.
34+
DOMNode.detachAll(outerNode);
35+
setTainted();
36+
setHTMLElement();
37+
}
38+
39+
@Override
40+
public void componentRemoved(ContainerEvent e) {
41+
DOMNode.detachAll(outerNode);
42+
setTainted();
43+
setHTMLElement();
44+
}
45+
46+
/*private*/ int timer;
2747

2848
public JSPopupMenuUI() {
2949

@@ -51,6 +71,7 @@ public DOMNode updateDOMNode() {
5171

5272
@Override
5373
public void installUI(JComponent jc) {
74+
((JPopupMenu) jc).addContainerListener(this);
5475
LookAndFeel.installColorsAndFont(jc,
5576
"PopupMenu.background",
5677
"PopupMenu.foreground",
@@ -59,6 +80,7 @@ public void installUI(JComponent jc) {
5980

6081
@Override
6182
public void uninstallUI(JComponent jc) {
83+
((JPopupMenu) jc).removeContainerListener(this);
6284
// TODO Auto-generated method stub
6385

6486
}
@@ -122,14 +144,16 @@ void stopTimer() {
122144
void hideMenu() {
123145
System.out.println("hideMenu");
124146
// not private -- hideMenu$
125-
j2sSwingMenu.hideMenu(menu);
147+
if (menu != null)
148+
j2sSwingMenu.hideMenu(menu);
126149
}
127150

128151
@Override
129152
public void dispose() {
130153
DOMNode.dispose(domNode);
131154
DOMNode.dispose(outerNode);
132-
j2sSwingMenu.disposeMenu(menu);
155+
if (menu != null)
156+
j2sSwingMenu.disposeMenu(menu);
133157
}
134158

135159
@Override

sources/net.sf.j2s.java.core/src/test/JalviewJSTest.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.awt.event.ActionListener;
1212
import java.awt.event.ItemEvent;
1313
import java.awt.event.ItemListener;
14+
import java.awt.event.MouseEvent;
15+
import java.awt.event.MouseListener;
1416

1517
import javax.swing.ImageIcon;
1618
import javax.swing.JButton;
@@ -22,6 +24,7 @@
2224
import javax.swing.JMenuBar;
2325
import javax.swing.JMenuItem;
2426
import javax.swing.JPanel;
27+
import javax.swing.JPopupMenu;
2528
import javax.swing.JRadioButton;
2629
import javax.swing.JRadioButtonMenuItem;
2730
import javax.swing.SwingConstants;
@@ -59,6 +62,50 @@ void doTest()
5962
main.getJMenuBar().add(menu);
6063
main.pack();
6164
main.setVisible(true);
65+
66+
JPopupMenu pmenu = new JPopupMenu();
67+
pmenu.add(new JMenuItem("testing1"));
68+
pmenu.add(new JMenuItem("testing2"));
69+
pmenu.add(new JMenuItem("testing3"));
70+
71+
main.addMouseListener(new MouseListener() {
72+
73+
@Override
74+
public void mouseClicked(MouseEvent e) {
75+
System.out.println(pmenu.getComponents().length);
76+
pmenu.remove(pmenu.getComponents().length - 1);
77+
System.out.println(pmenu.getComponents().length);
78+
pmenu.show(main, 100, 100);
79+
System.out.println(pmenu.getComponents().length);
80+
// TODO Auto-generated method stub
81+
82+
}
83+
84+
@Override
85+
public void mousePressed(MouseEvent e) {
86+
// TODO Auto-generated method stub
87+
88+
}
89+
90+
@Override
91+
public void mouseReleased(MouseEvent e) {
92+
// TODO Auto-generated method stub
93+
94+
}
95+
96+
@Override
97+
public void mouseEntered(MouseEvent e) {
98+
// TODO Auto-generated method stub
99+
100+
}
101+
102+
@Override
103+
public void mouseExited(MouseEvent e) {
104+
// TODO Auto-generated method stub
105+
106+
}
107+
108+
});
62109
}
63110

64111
/**

0 commit comments

Comments
 (0)