Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #4108
| Path | csiph.com!x330-a1.tempe.blueboxinc.net!feeder1.hal-mli.net!news.glorb.com!news-out.readnews.com!news-xxxfer.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!86597e80!not-for-mail |
|---|---|
| From | "tomaszewski.p" <tomaszewski.p@THRWHITE.remove-dii-this> |
| Subject | Re: JTree within JScrollP |
| Message-ID | <g96633$b4h$1@news.interia.pl> (permalink) |
| X-Comment-To | comp.lang.java.gui |
| Newsgroups | comp.lang.java.gui |
| In-Reply-To | <0a56d7bd-4911-480e-82ea-413d2adf8764@c58g2000hsc.googlegroups.com> |
| References | <0a56d7bd-4911-480e-82ea-413d2adf8764@c58g2000hsc.googlegroups.com> |
| Content-Type | text/plain; charset=IBM437 |
| Content-Transfer-Encoding | 8bit |
| X-Gateway | time.synchro.net [Synchronet 3.15a-Win32 NewsLink 1.92] |
| Lines | 145 |
| Date | Wed, 27 Apr 2011 15:48:44 GMT |
| NNTP-Posting-Host | 96.60.20.240 |
| X-Complaints-To | news@tds.net |
| X-Trace | newsreading01.news.tds.net 1303919324 96.60.20.240 (Wed, 27 Apr 2011 10:48:44 CDT) |
| NNTP-Posting-Date | Wed, 27 Apr 2011 10:48:44 CDT |
| Organization | TDS.net |
| Xref | x330-a1.tempe.blueboxinc.net comp.lang.java.gui:4108 |
Show key headers only | View raw
To: comp.lang.java.gui
"JSchneider" <johannes@familieschneider.info> wrote in message
news:0a56d7bd-4911-480e-82ea-413d2adf8764@c58g2000hsc.googlegroups.com...
> Hi,
>
> I have the following requirement:
>
> I have a JTree placed within a JScrollPane. The model of the JTree is
> now updated every other second. But the additional entries are added
> at the top of the Model (index is nearly always 0).
> This is a requirement and can't be changed...
[...]
> Now the problem:
> If the user has scrolled to the bottom (he wants to see the youngest
> entries) the visible entries change every time an additional row is
> added at the top (old mail has been added).
[...]
> ScrollRectToVisble causes a
> repaint with the old visible rect. Therefore the tree is
> "jumping" (paints one time with the "wrong" visible rect).
[...]
Try this:
import java.util.Enumeration;
import java.util.List;
import java.util.LinkedList;
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeModelEvent;
public class JTreeRefreshTest {
static class NodeElement {
private String message;
public NodeElement(String message) {
this.message = message;
}
@Override
public String toString() {
return message;
}
}
static class TestTreeModel extends DefaultTreeModel {
public TestTreeModel(TreeNode root) {
super(root);
}
public void addNode(DefaultMutableTreeNode parent,
DefaultMutableTreeNode child)
{
parent.insert(child, 0);
final int childIndex = parent.getIndex(child);
fireTreeNodesInserted(parent, parent.getPath(), new int[]
{childIndex}, new Object[] {child});
}
}
static class TestPanel extends JPanel {
private DefaultMutableTreeNode rootNode;
private TestTreeModel treeModel;
public TestPanel() {
super();
rootNode = new DefaultMutableTreeNode(new NodeElement("Root"));
for (int idx = 0; idx < 100; idx++) {
rootNode.add(new DefaultMutableTreeNode(new
NodeElement("Child " + idx)));
}
treeModel = new TestTreeModel(rootNode);
final JTree tree = new JTree(treeModel);
final JScrollPane scroll = new JScrollPane();
scroll.getViewport().add(tree);
setLayout(new BorderLayout());
add(scroll, BorderLayout.CENTER);
tree.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_1) {
final DefaultMutableTreeNode newNode = new
DefaultMutableTreeNode(new NodeElement("New Node"));
treeModel.addNode(rootNode, newNode);
}
}
});
treeModel.addTreeModelListener(new TreeModelListener() {
@Override
public void treeNodesChanged(TreeModelEvent event) {
}
@Override
public void treeNodesInserted(TreeModelEvent event) {
tree.scrollPathToVisible(event.getTreePath());
}
@Override
public void treeNodesRemoved(TreeModelEvent event) {
}
@Override
public void treeStructureChanged(TreeModelEvent event) {
}
});
}
}
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPanel(), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
Przemek
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24
Back to comp.lang.java.gui | Previous | Next — Previous in thread | Next in thread | Find similar
JTree within JScrollPane: "JSchneider" <jschneider@THRWHITE.remove-dii-this> - 2011-04-27 15:48 +0000
Re: JTree within JScrollP "tomaszewski.p" <tomaszewski.p@THRWHITE.remove-dii-this> - 2011-04-27 15:48 +0000
Re: JTree within JScrollP "JSchneider" <jschneider@THRWHITE.remove-dii-this> - 2011-04-27 15:48 +0000
Re: JTree within JScrollP "tomaszewski.p" <tomaszewski.p@THRWHITE.remove-dii-this> - 2011-04-27 15:48 +0000
csiph-web