Servus zusammen,
ich habe ein kurioses Verhalten festgestellt und kann mir dieses nicht erklären. Ich hoffe, jemand von euch hat eine Idee und kann mir so den Sachverhalt, bzw. meinen Fehler aufzeigen.
Zur Ausgangssituation:
Mein Programm erstellt einen JTree. Die einzelnen Knoten werden mittels einen überschriebenen DefaultTreeCellRenderer angepasst.
Da ich, wie zu sehen ist, ggf. Buttons mit in dem Panel verwende, und diese direkt ansteuern möchte, versetze ich den Knoten direkt in den Editiermodus, sobald die Maus sich über diesem befindet. Somit kann der Button direkt angewählt werden, ohne vorher den lästigen "einmal klicken für Editormodus" verwenden zu müssen. Der Expand und Collapse via Doppelklick wird hierdurch nicht beeinflusst.
Hier nun noch der Editor:
Das funktioniert soweit alles auch ganz wunderbar. ABER!
Sobald das Label, welches im TreeCellRenderer erstellt wird, einen ToolTip mitbekommt, funktioniert der Expand/Collapse auf diesem Knoten nicht mehr. Nehme ich den ToolTip raus, läuft alles ganz wunderbar.
Ich kann mir dieses Verhalten nicht erklären. Vielleicht mache ich auch noch etwas falsch oder/und ich bin blind für den eigenen Sourcecode geworden...
Hoffe einer von euch hat eine Idee/Erklärung.
Besten Dank schonmal!
ich habe ein kurioses Verhalten festgestellt und kann mir dieses nicht erklären. Ich hoffe, jemand von euch hat eine Idee und kann mir so den Sachverhalt, bzw. meinen Fehler aufzeigen.
Zur Ausgangssituation:
Mein Programm erstellt einen JTree. Die einzelnen Knoten werden mittels einen überschriebenen DefaultTreeCellRenderer angepasst.
Code:
...
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
/* Die zurückgelieferte Komponente, wird ein JPanel sein */
JPanel p = new JPanel(new BorderLayout());
/* Definiere das Label mit dem entsprechenden Inhalt
* - Das Label hat ggf. einen ToolTip (interessant für das spätere Problem)*/
InventoryTreeLabel label = new InventoryTreeLabel(
(DefaultMutableTreeNode)value,
this.useCode555Highlighting,
expanded);
/* Setze entsprechende dem Fokus und der Selektion das Highlighting */
if(hasFocus || sel)
label.highlight4Focus();
/* Label dem Panel anfügen */
p.add(label, BorderLayout.CENTER);
/* Handelt es sich bei dem beinhalteten Wert des Knotens um
* ein InventoryPeripherieDO, prüfe, ob Historiendaten vorliegen */
if(((DefaultMutableTreeNode)value).getUserObject() instanceof InventoryPeripherieDO
&& ((InventoryPeripherieDO)((DefaultMutableTreeNode)value).getUserObject()).hasHistory()
){
final InventoryPeripherieDO _invDO = ((InventoryPeripherieDO)((DefaultMutableTreeNode)value).getUserObject());
/* Füge einen Button zum Aufruf der Historiendaten an */
final JButton callHistory = new JButton(){
private static final long serialVersionUID = 1L;
@Override
public Dimension getPreferredSize(){
return new Dimension(20,18);
}
};
callHistory.setBorder(BorderFactory.createEmptyBorder(0,2,0,0));
callHistory.setIcon(SupportTOOL.getImageIcon("book_blue_open2"));
callHistory.setBackground(DialogTools.getDefaultBackgroundColor());
callHistory.setToolTipText("Historie zu diesem CI-Typen anzeigen");
callHistory.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
InventoryPeripherieHistoryPopupMenu popUp = _invDO.getHistoryPopup();
popUp.show(callHistory, callHistory.getLocationOnScreen().x, 250);
}
});
p.add(callHistory, BorderLayout.EAST);
}
return p;
}
...
Da ich, wie zu sehen ist, ggf. Buttons mit in dem Panel verwende, und diese direkt ansteuern möchte, versetze ich den Knoten direkt in den Editiermodus, sobald die Maus sich über diesem befindet. Somit kann der Button direkt angewählt werden, ohne vorher den lästigen "einmal klicken für Editormodus" verwenden zu müssen. Der Expand und Collapse via Doppelklick wird hierdurch nicht beeinflusst.
Code:
...
@Override
public void mouseMoved(MouseEvent e) {
inventoryTree.startEditingAtPath(inventoryTree.getPathForLocation(e.getX(), e.getY()));
}
...
Hier nun noch der Editor:
Code:
...
@Override
public Component getTreeCellEditorComponent(JTree tree,
Object value,
boolean isSelected,
boolean expanded,
boolean leaf,
int row){
System.out.println("Editing started for row " + row);
return tree.getCellRenderer().getTreeCellRendererComponent(tree, value, isSelected, expanded, leaf, row, true);
}
...
Das funktioniert soweit alles auch ganz wunderbar. ABER!
Sobald das Label, welches im TreeCellRenderer erstellt wird, einen ToolTip mitbekommt, funktioniert der Expand/Collapse auf diesem Knoten nicht mehr. Nehme ich den ToolTip raus, läuft alles ganz wunderbar.
Ich kann mir dieses Verhalten nicht erklären. Vielleicht mache ich auch noch etwas falsch oder/und ich bin blind für den eigenen Sourcecode geworden...
Hoffe einer von euch hat eine Idee/Erklärung.
Besten Dank schonmal!