Jtree 용 툴팁을 구현하는 가장 좋은 방법은?
문제
Jtree & Treemodel은 툴팁을 바로 나오는 박스를 제공하지 않기 때문에 어떻게 생각하십니까?
편집 : (나중에 내 질문에 대답합니다.)
@zarkonnen : GetToolTipText 아이디어에 감사드립니다.
나는 DefaultTreecellrenderer를 우선적으로 사용하여 또 다른 (아마도 약간 더 좋은) 방법을 알았고 그것을 공유 할 생각을했습니다.
public class JTreeWithToolTips {
private static class OwnRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
setToolTipText("foobar" + row);
return super.getTreeCellRendererComponent(tree, value, sel,
expanded, leaf, row, hasFocus);
}
}
public static void main(String[] args) {
JTree tree = new JTree(new Object[] { "foo", "bar", "foobar" });
tree.setCellRenderer(new OwnRenderer());
ToolTipManager.sharedInstance().registerComponent(tree);
JFrame frame = new JFrame();
frame.getContentPane().add(tree);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
해결책
보다 getToolTipText Jtree에서. 이렇게하면 나무가 무엇을 가져 가는지에 따라 툴팁을 표시 할 수 있습니다. (그래도 문서를 읽으십시오. JTREE를 ToolTipManager에 등록해야합니다.)
다른 팁
예, 사용할 수 있습니다 onMouseMoved
그런 다음 어떤 노드가 끝나는지를 알려주는 메소드 (이름을 기억하지 않습니다)를 사용하십시오. 당신이 null을 얻는다면, 분명히 당신은 노드를 넘지 않습니다.
구체적인 처리 할 때 TreeNode
서브 클래스는 자신의 답변과 의견을 바탕으로 내 인터페이스를 생각해 냈습니다. TreeNode
구현.
우리가 어떻게 확인하는지 확인하십시오 value
의식입니다 Tooltipable
에서 TreeCellRenderer
:
public static interface Tooltipable {
public String getToolTip();
}
public static class TheNode extends DefaultMutableTreeNode implements Tooltipable {
private String shortDesc, longDesc;
public TheNode(String shortDesc, String longDesc) {
super();
this.shortDesc = shortDesc;
this.longDesc = longDesc;
}
@Override
public String getToolTip() {
return longDesc;
}
@Override
public String toString() {
return shortDesc;
}
}
public static class TheModel extends DefaultTreeModel {
public TheModel() {
super(new TheNode("Root", "The base of everything"));
TheNode root = (TheNode)getRoot();
root.add(new TheNode("Second", "I am a number two"));
TheNode node = new TheNode("Third", "Another one bites the dust");
root.add(node);
node.add(new TheNode("Last", null)); // No tooltip for this one
}
}
public static class TreeTooltipRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
if (value instanceof Tooltipable)
setToolTipText(((Tooltipable)value).getToolTip());
return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setBounds(100, 100, 300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTree tree = new JTree(new TheModel());
ToolTipManager.sharedInstance().registerComponent(tree);
tree.setCellRenderer(new TreeTooltipRenderer());
frame.add(new JScrollPane(tree), BorderLayout.CENTER);
frame.setVisible(true);
}
제휴하지 않습니다 StackOverflow