Skip to content

Commit b37fa7f

Browse files
committed
JTextPane, JSEditorPaneUI, JSComboBoxUI fixes
1 parent df258e0 commit b37fa7f

File tree

13 files changed

+213
-55
lines changed

13 files changed

+213
-55
lines changed

sources/net.sf.j2s.java.core/src/javax/swing/text/DefaultCaret.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ protected Highlighter.HighlightPainter getSelectionPainter() {
443443
*/
444444
protected void positionCaret(MouseEvent e) {
445445
Point pt = new Point(e.getX(), e.getY());
446+
pt.x = Integer.MAX_VALUE;
446447
((TextUI) component.getUI()).viewToModel(component, pt, biasRet);
447448
if (pt.x >= 0) {
448449
if(biasRet[0] == null)
@@ -455,6 +456,7 @@ protected void positionCaret(MouseEvent e) {
455456

456457
private int getPosition(MouseEvent e, Bias[] biasret) {
457458
Point pt = new Point(e.getX(), e.getY());
459+
pt.x = Integer.MAX_VALUE;
458460
int pos = ((TextUI) component.getUI()).viewToModel(component, pt, biasRet);
459461
System.out.println("def caret getPos " + e.getID() + " " + pt);
460462
return pos;

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

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ J2S.__makeComboBox = function() {
105105
});
106106

107107
if (this.options.items)
108-
this.add(this.options.items);
108+
this.add(this.options.items, 1);
109109

110110
this.setSelectedIndex(this.options.selectedIndex)
111111
this._refresh();
@@ -115,7 +115,9 @@ J2S.__makeComboBox = function() {
115115
_destroy: function() {
116116
// remove generated elements
117117
this.cont.remove();
118-
this.popup.remove();
118+
// must append to body, as otherwise it is not actually removed
119+
$("body").append(this.popup);
120+
this.popup.remove();
119121
this.element
120122
.removeClass( 'custom-j2sCB' )
121123
.enableSelection()
@@ -143,32 +145,49 @@ J2S.__makeComboBox = function() {
143145
update: function(andTrigger) {
144146
var sel = this._selectedItem();
145147
var all;
146-
this.options.selectedIndex = (sel[0] ? sel[0].j2scbIndex : -1);
147-
this.head.text(sel.length ==0 ? '' :
148-
this.options.mode == 's' ? sel.text() : sel.length + ' of '
149-
+ (all = this.list.find('.j2scbopt').length) + ' selected option' + (all > 1 ? 's' :''));
148+
var i = (sel[0] ? sel[0].j2scbIndex : -1);
149+
this.options.selectedIndex = i;
150+
if (sel.length == 0) {
151+
this.head.text("");
152+
} else if (this.options.mode == 's') {
153+
var item = this.list["j2shead"+i];
154+
if (item) {
155+
this.head[0].removeChild(this.head[0].firstChild);
156+
item.style.top="0px";
157+
this.head[0].appendChild(item);
158+
} else {
159+
this.head.text(sel.text());
160+
}
161+
} else {
162+
this.head.text(sel.length + ' of '
163+
+ (all = this.list.find('.j2scbopt').length) + ' selected option' + (all > 1 ? 's' :''));
164+
}
150165
if (andTrigger)
151166
this._trigger( 'change' , null, [this, "selected", sel[0].j2scbIndex]);
152167
// else
153168
// this._stopT("update");
154169
},
155170
updateList: function(items) {
156171
this.list.children().detach();
157-
this.add(items);
172+
this.add(items, 1);
173+
},
174+
updateList2: function(items) {
175+
this.list.children().detach();
176+
this.add(items, 2);
158177
},
159-
add: function(items) {
178+
add: function(items, step) {
160179
var y = 0;
161180
if (Array.isArray(items)) {
162181
this.itemCount = 0;
163182
} else {
164183
this.list.children().each(function(a) {y += a.height()});
165184
items = [items];
166185
}
167-
for (var i = 0; i < items.length; i++) {
186+
for (var i = 0; i < items.length; i += step) {
168187
var item = items[i];
169188
if (!item)continue;
170189
var opt = $('<li>', {'class':'j2scbopt j2scb-unsel', 'id': this.id() + '_opt' + this.itemCount});
171-
opt[0].j2scbIndex = this.itemCount++;
190+
var pt = opt[0].j2scbIndex = this.itemCount++;
172191
this.list.append(opt);
173192
if (typeof item == 'string') {
174193
opt.text(item);
@@ -178,6 +197,8 @@ J2S.__makeComboBox = function() {
178197
opt.append(item);
179198
opt.css({height:ji.css("height")});
180199
y += opt.height();
200+
if (step == 2)
201+
this.list["j2shead" + pt] = items[i + 1];
181202
}
182203
this.list.css({height: (y + 2) + "px"});
183204
this._on(opt, {mouseleave: '_close', mouseover: '_overOpt', click : '_clickOpt'});

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.awt.EventQueue;
88
import java.awt.Graphics;
99
import java.awt.Insets;
10+
import java.awt.JSComponent;
1011
import java.awt.LayoutManager;
1112
import java.awt.Rectangle;
1213
import java.awt.event.ActionEvent;
@@ -138,6 +139,12 @@ public void propertyChange(PropertyChangeEvent e) {
138139
super.propertyChange(e);
139140
}
140141

142+
@Override
143+
public void dispose() {
144+
popup.dispose();
145+
super.dispose();
146+
}
147+
141148
// private void disposeCB() {
142149
// popup.uninstallingUI();
143150
// }
@@ -175,6 +182,8 @@ public void installUI(JComponent c) {
175182
listBox = popup = (JSComboPopupList) createPopup();
176183
listBox.setSelectionBackground(null);
177184
listBox.addListSelectionListener(getHandler());
185+
listBox.setBackground(jc.getBackground());
186+
178187
comboBox.add(listBox);
179188
// Is this combo box a cell editor?
180189
Boolean inTable = (Boolean) c.getClientProperty(IS_TABLE_CELL_EDITOR);
@@ -2123,4 +2132,12 @@ public void handleJSFocus(Object jco, Object related, boolean focusGained) {
21232132
super.handleJSFocus(jco, related, focusGained);
21242133
}
21252134

2135+
2136+
protected void setBackgroundImpl(Color color) {
2137+
if (domNode == null || isUIDisabled)
2138+
return;
2139+
backgroundColor = color;
2140+
setBackgroundDOM(this.domNode, color);
2141+
}
2142+
21262143
}

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

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ private int getJ2SCBInt(String name) {
7373

7474
@SuppressWarnings("unused")
7575
void createJ2SCB() {
76-
if (j2scb != null)
77-
j2scb.j2sCB("destroy");
76+
uninstallingUI();
7877
j2scb = (api.js) cbui.$(cbui.domNode);
7978
@SuppressWarnings("unused")
8079
Object me = this;
@@ -140,6 +139,7 @@ void updateText() {
140139
}
141140

142141
void updateCSS() {
142+
秘getUI().allowPaintedBackground = false;
143143
DOMNode.setSize(cbui.domNode, cbui.width, cbui.height);
144144
if (j2scb != null) {
145145
j2scb.j2sCB("updateCSS");
@@ -150,23 +150,28 @@ void updateList() {
150150
if (j2scb == null)
151151
return;
152152
int n = cbui.comboBox.getItemCount();
153-
DOMNode[] opts = new DOMNode[n];
153+
DOMNode[] opts = new DOMNode[n*2];
154154
JList l = this;
155155
Dimension d = l.getPreferredSize();
156156
int h = d.height;
157157
int w = d.width;
158158
JSListUI ui = (JSListUI) l.getUI();
159-
for (int i = 0; i < n; i++) {
160-
JComponent j = (JComponent) cbui.comboBox.getRenderer().getListCellRendererComponent(this,
161-
getModel().getElementAt(i), i, true, false);
162-
j.setSize(w, ui.getRowHeight(i));
163-
opts[i] = j.秘getUI().getListNode();
159+
for (int i = 0, p = 0; i < n; i++) {
160+
opts[p++] = renderItem(i, w, ui);
161+
opts[p++] = renderItem(i, w, ui);
164162
}
165-
j2scb.j2sCB("updateList", opts);
163+
j2scb.j2sCB("updateList2", opts);
166164
j2scb.j2sCB("setHeight", (h > JSComboBoxUI.MAX_HEIGHT ? JSComboBoxUI.MAX_HEIGHT : 0));
167165
updateCSS();
168166
}
169167

168+
private DOMNode renderItem(int i, int w, JSListUI ui) {
169+
JComponent j = (JComponent) cbui.comboBox.getRenderer().getListCellRendererComponent(this,
170+
getModel().getElementAt(i), i, true, false);
171+
j.setSize(w, ui.getRowHeight(i));
172+
return j.秘getUI().getListNode();
173+
}
174+
170175
void updateSelectedIndex() {
171176
if (j2scb != null)
172177
j2scb.j2sCB("setSelectedIndex", cbui.comboBox.getSelectedIndex());
@@ -241,6 +246,11 @@ public KeyListener getKeyListener() {
241246
return null;
242247
}
243248

249+
public void dispose() {
250+
uninstallingUI();
251+
}
252+
253+
244254
// @Override
245255
public void uninstallingUI() {
246256
if (j2scb != null)

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,7 @@ protected void newID(boolean forceNew) {
736736
public DOMNode getListNode() {
737737
DOMNode node = reInit(true);
738738
reInit(false);
739+
imagePersists = true;
739740
return node;
740741
}
741742

@@ -1318,7 +1319,7 @@ public void propertyChange(PropertyChangeEvent e) {
13181319
updatePropertyAncestor(false);
13191320
if (value == null)
13201321
return;
1321-
if (isDisposed && c.visible && e.getNewValue() != null)
1322+
if ((isDisposed || isTainted) && c.visible)
13221323
setVisible(true);
13231324
}
13241325
propertyChangedCUI(e, prop);
@@ -1371,7 +1372,10 @@ void propertyChangedFromListener(PropertyChangeEvent e, String prop) {
13711372
if (cellComponent != null || e.getNewValue() == null)
13721373
return;
13731374
Container anc = JSComponent.秘getTopInvokableAncestor(c, false);
1374-
updatePropertyAncestor(anc != null && anc.isVisible());
1375+
boolean isVis = (anc != null && anc.isVisible());
1376+
updatePropertyAncestor(isVis);
1377+
if (isVis && isTainted)
1378+
setHTMLElement();
13751379
break;
13761380
}
13771381
propertyChangedCUI(e, prop);
@@ -1922,7 +1926,7 @@ protected DOMNode setHTMLElementCUI() {
19221926
return outerNode;
19231927

19241928
if (isDummyFrame) {
1925-
isTainted = false;
1929+
setTainted(false);
19261930
return (outerNode = DOMNode.createElement("div", "dummyFrame"));
19271931
}
19281932

@@ -1980,7 +1984,7 @@ && isFrameIndependent() && !isSticky) {
19801984
} else {
19811985
DOMNode.setStyle(outerNode, "overflow", "hidden");
19821986
}
1983-
isTainted = false;
1987+
setTainted(false);
19841988

19851989
if (embeddingNode != null) {
19861990
// Note that detachAll leaves any previously attached nodes in limbo.
@@ -2069,6 +2073,8 @@ public void update(Graphics g, JComponent c) {
20692073
return;
20702074
// called from JComponent.paintComponent
20712075
if (cellComponent == null) {
2076+
if (DOMNode.getParent(domNode) != outerNode)
2077+
setTainted();
20722078
setHTMLElement();
20732079
if (allowTextAlignment && centeringNode != null)
20742080
setAlignments((AbstractButton) jc, false);
@@ -2266,7 +2272,7 @@ public String getJSTextValue() {
22662272
}
22672273

22682274
DOMNode getOuterNode() {
2269-
return (outerNode == null && !isUIDisabled ? setHTMLElement() : outerNode);
2275+
return ((outerNode == null || isTainted && !isTable) && !isUIDisabled ? setHTMLElement() : outerNode);
22702276
}
22712277

22722278
/**
@@ -3687,7 +3693,7 @@ public void setBackground(Color c) {
36873693
setBackgroundImpl(c);
36883694
}
36893695

3690-
private Color backgroundColor;
3696+
protected Color backgroundColor;
36913697

36923698
protected void setBackgroundImpl(Color color) {
36933699
// Don't allow color for Menu and MenuItem. This is taken care of by

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

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,9 @@ public void setText(String text) {
409409
html = sb.toString();// + "<div style='height:5px'><br></div>";
410410
}
411411
}
412-
if (isHTML) {
412+
if (jc.isOpaque())
413413
setBackgroundDOM(domNode, jc.getBackground());
414+
if (isHTML) {
414415
if (currentHTML != null && html.equals(rawHTML))
415416
return;
416417
rawHTML = html;
@@ -1264,18 +1265,7 @@ private int tabCount(String s) {
12641265
@Override
12651266
void setJSText() {
12661267
mytext = null;
1267-
updateDOMNode();
1268-
// System.out.println("JSEPUI iskeyaction " + (jc.秘keyAction != null) + "dot=" + dot + " len=" + editor.getDocument().getLength()
1269-
// + "\nEDITOR: >>" + PT.esc(editor.getText()) + "<<"
1270-
// + "\nJAVASC: >>" + PT.esc((String)DOMNode.getAttr(domNode, "innerText")) + "<<"
1271-
// + "\nJSHTML: >>" + PT.esc((String)DOMNode.getAttr(domNode, "innerHTML")) + "<<\n");
1272-
// for (int i = 0, len = editor.getCaretPosition(); i < len; i++)
1273-
// try {
1274-
// System.out.println("Ed[" + i + "]=" + editor.getDocument().getText(i, 1).codePointAt(0));
1275-
// } catch (BadLocationException e) {
1276-
// // TODO Auto-generated catch block
1277-
// e.printStackTrace();
1278-
// }
1268+
super.setJSText();
12791269
}
12801270

12811271

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ public void setVisible(boolean b) {
231231
setHTMLElement();
232232
menu = (JPopupMenu) jc;
233233
j2sSwingMenu.setMenu(menu);
234-
isTainted = false;
234+
setTainted(false);
235235
Component top = JSComponent.秘getTopInvokableAncestor(jc, true);
236236
if (top != null) {
237237
top.removeMouseListener(this);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ public void propertyChange(PropertyChangeEvent e) {
515515
break;
516516
case "componentOrientation":
517517
calculateGeometry();
518-
setTainted(true);// slider.repaint();
518+
setTainted();// slider.repaint();
519519
// InputMap km = getInputMap(JComponent.WHEN_FOCUSED, slider);
520520
// SwingUtilities.replaceUIInputMap(slider,
521521
// JComponent.WHEN_FOCUSED, km);
@@ -524,7 +524,7 @@ public void propertyChange(PropertyChangeEvent e) {
524524
((BoundedRangeModel) e.getOldValue()).removeChangeListener(this);
525525
((BoundedRangeModel) e.getNewValue()).addChangeListener(this);
526526
// calculateThumbLocation();
527-
setTainted(true);// slider.repaint();
527+
setTainted();// slider.repaint();
528528
break;
529529
}
530530
super.propertyChange(e);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public class JSTableHeaderUI extends JSLightweightUI {
119119
@Override
120120
public void setTainted() {
121121
if (!working)
122-
isTainted = true;
122+
super.setTainted();
123123
}
124124

125125
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ protected int getContainerHeight() {
228228
@Override
229229
public void setTainted() {
230230
if (!working)
231-
isTainted = true;
231+
super.setTainted();
232232
}
233233

234234
@Override

0 commit comments

Comments
 (0)