Hi Sharon, Please see the snippet at the end of this mail. It has a custom table header which listens to mouse events on the underlying JTableHeader.
I am just using a method invocation from client to server instead of generating an event. You can modify if you wish to generate an event. >in the event. When I add the event source as an arg I get an error on >the client side: >'No coder registered for class >com.ulcjava.base.client.UITableHeader.BasicTableHeader' Event source is the UITablehHeader.BasicTableHeader - a client side proxy object. ULC framework does not know how to serialises this class to be able to send it to the server. Moreover, it does not make sense to send this class to the server because client side classes (UI*) are not available on the server. I hope this helps. Thanks and regards, Janak >-----Original Message----- >From: [EMAIL PROTECTED] >[mailto:[EMAIL PROTECTED] Behalf Of Sharon O'Connor >Sent: Monday, October 02, 2006 9:28 PM >To: [email protected] >Subject: [ULC-developer] Setting location of a dialog > > >Hi, > >I am trying to set the location of a dialog box so that it will appear >as close as possible to a table column that was clicked. The purpose is >that the columns are searchable so I would like the dialog in which the >user is going to enter the text they are searching for to 'pop-up' next >to the column they are searching on. > >My applet that is contained within a frame in my webapp. I am able to >create an event and send the point that is clicked to the server-side >but the point is relative to the table. I have yet to figure out how to >set the location of the dialog using this point. I have also tried >setLocationRelativeTo(ULCTable) but this does not set it close to the >header or the column. > >I have overridden UITableHeader in order to fire off the event but I >have been unsuccessful in setting the actual header as one of the args >in the event. When I add the event source as an arg I get an error on >the client side: >'No coder registered for class >com.ulcjava.base.client.UITableHeader.BasicTableHeader' > >If I do not try to send the actual event source from the client to the >server it all works fine, except that I can not set the location of the >dialog where I want it. > > >Following is the event code in my UITableHeader: > > public void mousePressed(MouseEvent event) { > JTableHeader header = (JTableHeader)getBasicComponent(); > int colIndex = header.columnAtPoint(event.getPoint()); > TableColumnModel model = header.getColumnModel(); > TableColumn col = model.getColumn(colIndex); > > Object[] args = new Object[4]; > args[0] = event.getPoint(); > args[1] = event.getSource().toString(); > args[2] = col.getModelIndex(); > args[3] = event.getSource(); //This causes an error on the >client side > fireMandatoryEventULC("foo", "foo", args); > > >Following is the code in my dispatcher: > > protected class ComboSortedTableHeaderDispatcher extends >ULCTableHeaderDispatcher{ > public EventObject createFooEvent >(com.ulcjava.base.application.util.Point p, String source, int col, >UITableHeader.BasicTableHeader header){ > > ComboSortedHeaderEvent event = new ComboSortedHeaderEvent >(source, "foo"); > event.setPoint(p); > event.setColumn(getTable().getColumnModel().getColumn(col)); > event.setTable(getTable()); > return event; > } > >Thank you for any suggestions in advance. > >-- >Sharon O'Connor >Software Engineer >Meridias Capital > >Tel: 866-369-7755 ext. 4096 ---------------- import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import com.ulcjava.base.application.AbstractApplication; import com.ulcjava.base.application.ULCBoxPane; import com.ulcjava.base.application.ULCDialog; import com.ulcjava.base.application.ULCFrame; import com.ulcjava.base.application.ULCScrollPane; import com.ulcjava.base.application.ULCTable; import com.ulcjava.base.application.table.DefaultTableModel; import com.ulcjava.base.application.table.ULCTableHeader; import com.ulcjava.base.application.util.Dimension; import com.ulcjava.base.application.util.Point; import com.ulcjava.base.client.UITableHeader; import com.ulcjava.base.development.DevelopmentRunner; public class DialogLocationInTableSnippet extends AbstractApplication { public void start() { final ULCTable table = new ULCTable(new SnippetTableModel(10, 3)); table.setTableHeader(new ULCMyTableHeader(table)); ULCBoxPane content = new ULCBoxPane(true); ULCScrollPane scp = new ULCScrollPane(table); content.add(ULCBoxPane.BOX_EXPAND_EXPAND, scp); ULCFrame frame = new ULCFrame("ULCTableColDragSnippet"); frame.setDefaultCloseOperation(ULCFrame.TERMINATE_ON_CLOSE); frame.add(content); frame.setSize(300, 300); frame.setVisible(true); } public static void main(String[] args) { DevelopmentRunner .setApplicationClass(DialogLocationInTableSnippet.class); DevelopmentRunner.run(); } private static class SnippetTableModel extends DefaultTableModel { public SnippetTableModel(int rowCount, int columnCount) { super(createRows(rowCount, columnCount), createColumnNames(columnCount)); } private static Object[][] createRows(int rowCount, int columnCount) { Object[][] result = new Object[rowCount][]; for (int i = 0; i < rowCount; i++) { result[i] = new Object[columnCount]; for (int j = 0; j < columnCount; j++) { result[i][j] = i + ":" + j + " AAAa"; } } return result; } private static String[] createColumnNames(int columnCount) { String[] result = new String[columnCount]; for (int i = 0; i < columnCount; i++) { result[i] = Integer.toString(i); } return result; } } public static class ULCMyTableHeader extends ULCTableHeader { private ULCTable myTable; protected String typeString() { return UIMyTableHeader.class.getName(); } public ULCMyTableHeader(ULCTable table) { super(table); myTable = table; } public void displaySearchDialog(Point location, Integer colIndex) { ULCDialog d = new ULCDialog(null, "Search column " + myTable.getColumnName(colIndex.intValue())); d.setSize(new Dimension(200, 70)); d.setLocation(location); d.setVisible(true); } protected class ULCMyTableHeaderDispatcher extends ULCTableHeader.ULCTableHeaderDispatcher { public void displaySearchDialog(Point location, Integer colIndex) { ULCMyTableHeaderDispatcher.this.displaySearchDialog(location, colIndex); } } } public static class UIMyTableHeader extends UITableHeader implements MouseListener { protected void postInitializeState() { super.postInitializeState(); getBasicTableHeader().addMouseListener(this); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent event) { java.awt.Point tableLocation = getBasicTableHeader().getTable() .getLocationOnScreen(); java.awt.Point relativeColumnLocation = event.getPoint(); java.awt.Point dialogLocation = new java.awt.Point(tableLocation.x + relativeColumnLocation.x, tableLocation.y + relativeColumnLocation.y); JTableHeader header = (JTableHeader) getBasicComponent(); int colIndex = header.columnAtPoint(event.getPoint()); TableColumnModel model = header.getColumnModel(); TableColumn col = model.getColumn(colIndex); Object[] args = new Object[2]; args[0] = dialogLocation; args[1] = new Integer(col.getModelIndex()); invokeULC("displaySearchDialog", args); } public void mouseReleased(MouseEvent e) { } } } _______________________________________________ ULC-developer mailing list [email protected] http://lists.canoo.com/mailman/listinfo/ulc-developer
