Skip to content

Commit cb4ce6f

Browse files
committed
JTable fixes for cell renderers and cell editors
1 parent 9e23ad6 commit cb4ce6f

9 files changed

Lines changed: 119 additions & 104 deletions

File tree

sources/net.sf.j2s.java.core/src/javax/swing/JComponent.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4568,6 +4568,9 @@ void _paintImmediately(int x, int y, int w, int h) {
45684568
}
45694569
} else {
45704570
// SwingJS not clipping for better performance
4571+
g.setClip(paintImmediatelyClip.x, paintImmediatelyClip.y,
4572+
paintImmediatelyClip.width, paintImmediatelyClip.height);
4573+
45714574
// g.setClip(paintImmediatelyClip.x,paintImmediatelyClip.y,
45724575
// paintImmediatelyClip.width,paintImmediatelyClip.height);
45734576

sources/net.sf.j2s.java.core/src/javax/swing/JTable.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5553,31 +5553,32 @@ public boolean stopCellEditing() {
55535553
if ("".equals(s) || constructorClass == String.class) {
55545554
if (constructorClass == String.class) {
55555555
value = s;
5556-
return super.stopCellEditing(); }
5556+
}
5557+
return super.stopCellEditing();
55575558

55585559
}
55595560
// SwingUtilities2.checkAccess(constructor.getModifiers());
5560-
5561+
55615562
boolean haveConstructor = true;
55625563
/**
55635564
* @j2sNative
55645565
*
5565-
* haveConstructor = !!constructor.getConstructor;
5566+
* haveConstructor = !!constructor.getConstructor;
55665567
*/
5567-
{}
5568+
{
5569+
}
55685570
if (constructorClass == String.class) {
55695571
value = s;
55705572
} else if (haveConstructor) {
5571-
value = constructorClass.getConstructor(argTypes).newInstance(
5572-
new Object[] { s });
5573+
value = constructorClass.getConstructor(argTypes).newInstance(new Object[] { s });
55735574
} else {
5574-
/**
5575-
* @j2sNative
5576-
* debugger;
5577-
*/
5578-
{}
5575+
/**
5576+
* @j2sNative debugger;
5577+
*/
5578+
{
5579+
}
55795580
}
5580-
5581+
55815582
} catch (Throwable e) { // BH Throwable here
55825583
((JComponent) getComponent()).setBorder(new LineBorder(Color.red));
55835584
return false;

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,18 +133,12 @@ public static void getRectangle(DOMNode node, Rectangle r) {
133133

134134

135135
public static DOMNode setAttr(DOMNode node, String attr, Object val) {
136-
if (val == null) {
137-
node.removeAttribute(attr);
138-
} else {
139-
/**
140-
* @j2sNative
141-
*
142-
* node[attr] = (val == "TRUE" ? true : val);
143-
*
144-
*/
145-
{
146-
}
147-
}
136+
/**
137+
* @j2sNative
138+
*
139+
* node[attr] = (val == "TRUE" ? true : val);
140+
*
141+
*/
148142
return node;
149143
}
150144

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package swingjs.plaf;
2+
3+
import java.awt.JSComponent;
4+
5+
import swingjs.api.js.DOMNode;
6+
7+
/**
8+
*
9+
* JTable and JTableHeader
10+
*
11+
* @author Bob Hanson
12+
*
13+
*/
14+
public abstract class CellHolder extends JSLightweightUI {
15+
16+
static String getRowColumnID(JSComponentUI holder, int row, int col) {
17+
return holder.id + "_tab" + (row >= 0 ? "row" + row : "") + "_col" + col;
18+
}
19+
20+
static DOMNode getCellNode(JSComponentUI holder, int row, int col) {
21+
String rcID = getRowColumnID(holder, row, col);
22+
DOMNode td = DOMNode.createElement("div", rcID);
23+
holder.$(td).addClass("swing-td");
24+
DOMNode.setAttrs(td, "data-table-ui", holder, "data-row", "" + row, "data-col", "" + col);
25+
return td;
26+
}
27+
28+
static DOMNode findCellNode(JSComponentUI holder, int row, int col) {
29+
String rcID = getRowColumnID(holder, row, col);
30+
return holder.$("#" + rcID).get(0);
31+
}
32+
33+
static void updateCellNode(DOMNode td, JSComponent c, int width, int height) {
34+
JSComponentUI ui;
35+
if (c != null && !(ui = (JSComponentUI) c.getUI()).isNull) {
36+
if (width > 0) // for table header, to center
37+
c.setSize(width, height);
38+
39+
40+
ui.domNode = ui.outerNode = null;
41+
ui.updateDOMNode();
42+
DOMNode.setAttr(ui.domNode, "data-source", c); // necessary for Firefox but not Chrome!??
43+
DOMNode.setAttr(ui.domNode, "data-ui", null); // necessary for Firefox but not Chrome!??
44+
DOMNode.setAttr(ui.domNode, "data-component", null); // necessary for Firefox but not Chrome!??
45+
ui.newID();
46+
47+
48+
49+
// if (c != null && !(ui = (JSComponentUI) c.getUI()).isNull) {
50+
// c.setSize(cw[col], thh);
51+
// ui.domNode = ui.outerNode = null;
52+
// ui.newID();
53+
// td.appendChild(ui.updateDOMNode());
54+
// ui.domNode = ui.outerNode = null;
55+
// }
56+
//
57+
58+
59+
60+
61+
td.appendChild(ui.domNode);
62+
DOMNode.setStyles(ui.domNode, "width", "unset");
63+
DOMNode.setStyles(ui.domNode, "height", "unset");
64+
ui.domNode = ui.outerNode = null;
65+
}
66+
}
67+
68+
69+
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import javax.swing.LookAndFeel;
4141
import javax.swing.UIManager;
4242
import javax.swing.plaf.UIResource;
43+
import javax.swing.table.TableCellRenderer;
44+
4345
import swingjs.api.js.DOMNode;
4446

4547
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ public void uninstallJS() {
411411
}
412412
}
413413

414-
protected JQueryObject $(DOMNode node) {
414+
protected JQueryObject $(Object node) {
415415
return JSUtil.getJQuery().$(node);
416416
}
417417

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
import java.awt.peer.LightweightPeer;
44

55
/**
6-
* Just a way of determining whether this component is not a Frame, Window, or Dialog
6+
* Just a way of determining whether this component is not a Frame, Window, or Dialog.
7+
*
8+
* It's use is in checking LightweightPeer, as for example:
9+
*
10+
* if (component.peer instanceof LightweightPeer) ...
11+
*
712
*
813
* @author Bob Hanson
914
*

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

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,10 @@
5252
import javax.swing.RowSorter;
5353
import javax.swing.SwingUtilities;
5454
import javax.swing.event.MouseInputListener;
55-
import javax.swing.plaf.basic.BasicTableHeaderUI;
56-
57-
import swingjs.plaf.JSComponentUI;
58-
import swingjs.plaf.HTML5LookAndFeel;
59-
import swingjs.plaf.JSTableHeaderUI;
6055
import javax.swing.table.JTableHeader;
6156
import javax.swing.table.TableCellRenderer;
6257
import javax.swing.table.TableColumn;
6358
import javax.swing.table.TableColumnModel;
64-
import javax.swing.table.TableModel;
6559

6660
import sun.swing.DefaultLookup;
6761
import sun.swing.UIAction;
@@ -133,22 +127,11 @@ protected DOMNode updateDOMNode() {
133127
oldrh = rh;
134128
oldrc = rc;
135129

136-
TableModel m = table.getModel();
137-
tableHeader = table.getTableHeader();
138-
TableColumnModel tcm = table.getColumnModel();
139-
TableColumn c1 = tcm.getColumn(0);
140-
int cw = c1.getWidth();
141-
142-
TableColumnModel hcm = tableHeader.getColumnModel();
143130
int thh = tableHeader.getHeight();
144-
Object v = m.getValueAt(2, 2);
145131

146132
int w = table.getWidth();
147-
int h = tableHeader.getHeight();
148-
149133
if (domNode == null) {
150134
domNode = newDOMObject("div", id);
151-
152135
}
153136
DOMNode.setStyles(domNode, "width", w + "px", "height", thh + "px");
154137

@@ -181,32 +164,21 @@ protected void addChildrenToDOM(Component[] children) {
181164
headdiv = DOMNode.createElement("div", rid);
182165
DOMNode.setStyles(headdiv, "height", thh + "px");
183166
domNode.appendChild(headdiv);
184-
int tx = 0;
185-
JSComponentUI ui;
186-
for (int col = 0; col < ncols; col++) {
187-
DOMNode td = DOMNode.createElement("div", rid + "_col" + col);
188-
//DOMNode.setStyles(td, "border", "1px solid black");
189-
$(td).addClass("swing-td");
190-
DOMNode.setAttrs(td, "data-table-ui", this, "data-row", "-1", "data-col", col);
167+
for (int col = 0, tx = 0; col < ncols; col++) {
168+
DOMNode td = CellHolder.getCellNode(this, -1, col);
191169
DOMNode.setStyles(td, "width", cw[col] + "px");
192170
DOMNode.setStyles(td, "height", thh + "px");
193171
DOMNode.setStyles(td, "left", tx + "px");
194172
DOMNode.setStyles(td, "top", 0 + "px");
195173
DOMNode.setStyles(td, "position", "absolute");
196174
tx += cw[col];
197175
headdiv.appendChild(td);
198-
JSComponent c = (JSComponent) getHeaderRenderer(col);
199-
if (c != null && !(ui = (JSComponentUI) c.getUI()).isNull) {
200-
c.setSize(cw[col], thh);
201-
ui.domNode = null;
202-
ui.updateDOMNode();
203-
td.appendChild(ui.domNode);
204-
}
176+
CellHolder.updateCellNode(td, (JSComponent) getHeaderRenderer(col), cw[col], thh);
205177
}
206178

207179
}
208180

209-
private static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
181+
private static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
210182

211183
//
212184
// Instance Variables
@@ -241,6 +213,7 @@ private void repaintHeader(Object source) {
241213
if (ui == null) {
242214
return;
243215
}
216+
System.out.println("repaintHeader");
244217
th.repaint(th.getHeaderRect(ui.getSelectedColumnIndex()));
245218
}
246219
}
@@ -843,6 +816,7 @@ private Component getHeaderRenderer(int columnIndex) {
843816
}
844817

845818
private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) {
819+
//System.out.println("paintCell header" + columnIndex);
846820
Component component = getHeaderRenderer(columnIndex);
847821
rendererPane.paintComponent(g, component, tableHeader, cellRect.x, cellRect.y,
848822
cellRect.width, cellRect.height, true);

0 commit comments

Comments
 (0)