Skip to content

Commit a3caa51

Browse files
committed
JSlider ui fix for remove/add cycle
1 parent 4645230 commit a3caa51

File tree

4 files changed

+42
-10
lines changed

4 files changed

+42
-10
lines changed

sources/net.sf.j2s.java.core/src/swingjs/api/js/JQuery.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ public interface JQuery {
1010

1111
Object parseJSON(String json);
1212

13+
Object data(Object node, String attr);
14+
1315
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,9 @@ private void uninstallJS() {
684684
protected JQueryObject $(Object node) {
685685
return jquery.$(node);
686686
}
687+
protected Object $data(DOMNode node, String attr) {
688+
return (node == null ? null : jquery.data(node,attr));
689+
}
687690

688691
/**
689692
* Set the associated JComponent. Setting comp null will disable this UI from

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

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public DOMNode updateDOMNode() {
9696
boolean isHoriz = (slider.getOrientation() == SwingConstants.HORIZONTAL);
9797
boolean isVerticalScrollBar = (isScrollBar && !isHoriz);
9898
boolean isInverted = isVerticalScrollBar || !isScrollBar && slider.getInverted();
99-
boolean isChanged = false;
99+
boolean isChanged = sliderDisposed;
100100
if (isHoriz != this.isHoriz || isVerticalScrollBar != this.isVerticalScrollBar
101101
|| isInverted != this.isInverted) {
102102
this.isHoriz = isHoriz;
@@ -107,8 +107,6 @@ public DOMNode updateDOMNode() {
107107
boolean isNew = (domNode == null);
108108
if (isNew) {
109109
domNode = wrap("div", id + "_wrap", jqSlider = DOMNode.createElement("div", id));
110-
$(domNode).addClass("swingjs"); // ??
111-
$(domNode).addClass("ui-j2sslider-wrap"); // ??
112110
setJQuerySliderAndEvents();
113111
setTainted();
114112
} else if (isChanged) {
@@ -126,6 +124,7 @@ public DOMNode updateDOMNode() {
126124
}
127125

128126
private String foreColor = null;
127+
private boolean sliderDisposed;
129128
@Override
130129
public void setForeground(Color c) {
131130
if (!paintTicks && !paintLabels)
@@ -188,11 +187,17 @@ protected void setBackgroundImpl(Color color) {
188187
}
189188

190189
private void disposeSlider() {
191-
Object slider = $(jqSlider);
192-
/**
193-
* @j2sNative slider.j2sslider("destroy");
194-
*
195-
*/
190+
if (sliderInitialized()) {
191+
Object slider = $(jqSlider);
192+
/**
193+
*
194+
* @j2sNative
195+
*
196+
*
197+
* slider.j2sslider("destroy");
198+
*
199+
*/
200+
}
196201
DOMNode.dispose(jqSlider);
197202
}
198203

@@ -209,8 +214,15 @@ private void setSliderFields() {
209214
jScrollBar = (JScrollBar) jc;
210215
}
211216

212-
private void setJQuerySliderAndEvents() {
217+
@Override
218+
public void dispose() {
219+
sliderDisposed = true;
220+
super.dispose();
221+
}
213222

223+
void setJQuerySliderAndEvents() {
224+
$(domNode).addClass("swingjs");
225+
$(domNode).addClass("ui-j2sslider-wrap"); // for mouse-down event in jquery-ui-j2sslider.js
214226
Object slider = $(jqSlider);
215227
/**
216228
* @j2sNative
@@ -306,6 +318,7 @@ private void setup(boolean isNew) {
306318
setDataComponent(domNode);
307319
setDataComponent(sliderHandle);
308320
}
321+
sliderDisposed = false;
309322
}
310323

311324
/**
@@ -314,13 +327,15 @@ private void setup(boolean isNew) {
314327
* @param val
315328
*/
316329
protected void setSliderAttr(String key, float val) {
330+
if (!sliderInitialized())
317331
noSnapping = true;
318332
String id = null;
319333
try {
320334
Object jsslider = $(jqSlider);
321335
/**
322336
* @j2sNative
323-
* id = this.jqSlider.id;
337+
*
338+
* id = this.jqSlider.id;
324339
* jsslider.j2sslider("option",key,val);
325340
*/
326341
} catch (Throwable t) {
@@ -330,6 +345,10 @@ protected void setSliderAttr(String key, float val) {
330345
noSnapping = isScrollBar;
331346
}
332347

348+
private boolean sliderInitialized() {
349+
return ($data(jqSlider, "ui-j2sslider") != null);
350+
}
351+
333352
public void setSlider() {
334353
setSliderAttr("min", min);
335354
// hack is for list to not show bottom line

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ public class Test_Applet_Scroll extends JApplet implements ChangeListener, Mouse
6565

6666
private JPanel panel2;
6767

68+
private JSlider vslider;
69+
70+
private JPanel vp;
71+
6872
void setSize(JComponent c, int x, int y) {
6973
if (preferred)
7074
c.setPreferredSize(new Dimension(x, y));
@@ -157,6 +161,8 @@ public void actionPerformed(ActionEvent event) {
157161
label.setBackground(button2.isSelected() ? Color.green : Color.yellow);
158162
tf.setBackground(Color.green);
159163
label.setText("btn2");
164+
vp.remove(vslider);
165+
vp.add(vslider);
160166
JFrame frame1 = new JFrame();
161167
frame1.setLocationRelativeTo(button2);
162168
JPanel jp = new JPanel();
@@ -216,6 +222,8 @@ public void actionPerformed(ActionEvent event) {
216222
mkBar(p, tf, Adjustable.VERTICAL, 20, 200);
217223
mkSlider(p, tf, Adjustable.VERTICAL, 20, 200);
218224
JSlider slider = mkSlider(p, tf, Adjustable.VERTICAL, 70, 200);
225+
vslider = slider;
226+
vp = p;
219227
slider.setInverted(false);
220228
slider.setPaintTicks(true);
221229
slider.setPaintLabels(true);

0 commit comments

Comments
 (0)