Thread: [Java-gnome-developer] Using TreeView isgnals with Glade
Brought to you by:
afcowie
From: Khiraly <khi...@gm...> - 2005-05-01 19:00:43
|
Hi! I added the signals from Glade and created a method for this signal in my .java file. If I have forgotten to create the method in my jav afile, I got this error: java.lang.NoSuchMethodException: org.epointsystem.puli.gui.Puli.onUserlistTreeRowActivated Now I wanted to add a signal within a TreeView object. (I have already added in glade) I have this error message: java.lang.NullPointerException at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at org.gnu.glade.ListenerDelegate.create(ListenerDelegate.java:125) at org.gnu.glade.LibGlade.connect(LibGlade.java:180) at org.gnu.glade.LibGlade.glade_xml_signal_autoconnect_full(Native Method) at org.gnu.glade.LibGlade.<init>(LibGlade.java:98) at org.gnu.glade.LibGlade.<init>(LibGlade.java) at org.epointsystem.puli.gui.Puli.<init>(Puli.java:64) at org.epointsystem.puli.gui.Puli.main(Puli.java:216) java.lang.reflect.InvocationTargetException: ListenerDelegate - create failure! Is it possible to add directly signals to TreeView from Glade? Best regards, Khiraly ps: I have follow the TreeView tutorial, but I wanted to use glade as much as it is possible |
From: Khiraly <khi...@gm...> - 2005-05-01 20:30:35
|
Finally I have a working code. But I have questions too. Here is the example code: -------------------- userlistTree = (TreeView) puliApp.getWidget("userlistTree"); // userlist tree userlistTree.addListener(new TreeViewListener() { public void treeViewEvent(TreeViewEvent event) { System.out.println("DoubleClick "+event); } }); DataColumn[] dc = new DataColumn[3]; dc[0] = new DataColumnBoolean(); dc[1] = new DataColumnPixbuf(); dc[2] = new DataColumnString(); ListStore ls = new ListStore( dc ); userlistTree.setModel( ls ); userlistTree.setHeadersVisible( false ); /* true by default */ TreeViewColumn col0 = new TreeViewColumn(); CellRendererToggle render0 = new CellRendererToggle(); col0.packStart(render0, true); col0.addAttributeMapping(render0,CellRendererToggle.Attribute.ACTIVE,(DataColumnBoolean)dc[0]); TreeViewColumn col1 = new TreeViewColumn(); CellRendererPixbuf render1 = new CellRendererPixbuf(); col0.packStart(render1, true); col0.addAttributeMapping(render1,CellRendererPixbuf.Attribute.PIXBUF,(DataColumnPixbuf)dc[1]); TreeViewColumn col2 = new TreeViewColumn(); CellRendererText render2 = new CellRendererText(); col0.packStart(render2, true); col0.addAttributeMapping(render2,CellRendererText.Attribute.TEXT,(DataColumnString)dc[2]); userlistTree.appendColumn(col0); userlistTree.appendColumn(col1); userlistTree.appendColumn(col2); TreeIter it = null; boolean bool = true; it = ls.appendRow(); ls.setValue(it, (DataColumnBoolean)dc[0], Boolean.valueOf( bool ).booleanValue() ); try { ls.setValue(it, (DataColumnPixbuf)dc[1], new Pixbuf("images/me.jpg") ); } catch(JGException e) { System.err.println( "image not found : "+e.getMessage() ); } ls.setValue(it, (DataColumnString)dc[2], "[HUN]Khiraly" ); ------------------------------ My question is about the above code example is this three lines: userlistTree.appendColumn(col0); userlistTree.appendColumn(col1); userlistTree.appendColumn(col2); All this three line generate an treeViewEvent(TreeViewEvent event) method call. My program start to print three times the method's output: DoubleClick org.gnu.gtk.event.TreeViewEvent[source=org.gnu.gtk.TreeView@17471e0,id=COLUMNS_CHANGED] DoubleClick org.gnu.gtk.event.TreeViewEvent[source=org.gnu.gtk.TreeView@17471e0,id=COLUMNS_CHANGED] DoubleClick org.gnu.gtk.event.TreeViewEvent[source=org.gnu.gtk.TreeView@17471e0,id=COLUMNS_CHANGED] Of course, after if I double click on the item of treeview, It prints the above message. Why userlistTree.appendColumn generates a doubleclick signal? All the appendColumn will generate a doubleclick signal in the future? Best regards, Khiraly |
From: Khiraly <khi...@gm...> - 2005-05-01 21:00:22
|
Sorry for this many messages, but I have resolved. Maybe there are people who are interesting. The appenColumn generate COLUMN_CHANGED signal and the double-click generate ROW_ACTIVATED signal. So I have added an if() condition. There is the corrected source code: userlistTree = (TreeView) puliApp.getWidget("userlistTree"); // userlist tree userlistTree.addListener(new TreeViewListener() { public void treeViewEvent(TreeViewEvent event) { if (event.isOfType(TreeViewEvent.Type.ROW_ACTIVATED)) { System.out.println("DoubleClick "+event); } } }); Best regards, Khiraly |
From: Andrew C. <an...@op...> - 2005-05-02 01:24:00
|
On Sun, 2005-01-05 at 23:00 +0200, Khiraly wrote: > The appenColumn generate COLUMN_CHANGED signal and the double-click > generate ROW_ACTIVATED signal. So I have added an if() condition. In my experience, some various number of signals are emitted any time you do anything in GTK - and it can be a bit unpredictable. For example, if you "activate" a button, a "clicked" signal will also be generated. You get that sort of thing all through GTK. So definitely, > if (event.isOfType(TreeViewEvent.Type.ROW_ACTIVATED)) { is necessary ... [I tend to use if (event.getType() == TreeViewEvent.Type.ROW_ACTIVATED) { But I don't suppose there is any difference, is there :) The thing to look out for is that just because you handled the one signal you think you are interested in, doesn't mean there are others. In one case, I had my signal handler generating a new event which resulted in a new signal which resulted in re-entry to that handler! Ick! AfC Sydney |
From: Khiraly <khi...@gm...> - 2005-05-02 20:30:26
|
Hi! I can resize the window VERTICALLY without any problem (so raising and reducing work too) There are problem when I want to resize HORIZONTALLY: I can raise the size of my window without any problem. BUT if I reduce the window size its simply not work (the debug window is not showing (View -> Debug window), OR its extremely SLOW (the debug window are showing)). The example application (eclipse workspace tar.gz-ed up), its available at(61kB): http://khiraly.4242.hu/tmp/puliProjekt-maj1.tar.gz (It require in eclipse glade.jar and gtk.jar, and argument config.xml in the Run menu. The main class is org.epointsystem.puli.gui.Puli.java) My theory: I think this resizing problem come from the wrapping mode (n TextView widget). So if the wrapping mode is set to CHARACTER (ther are: none, character, word), the problem is exist. Can somebody verify this bug? Best regards, Khiraly |