TreeLineselection: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springenK |
K |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 7: | Zeile 7: | ||
[[Datei:TreeLineselection.jpg]] | [[Datei:TreeLineselection.jpg]] | ||
− | < | + | <syntaxhighlight lang="java"> |
import javax.swing.*; | import javax.swing.*; | ||
− | public class LineTreeDemo | + | public class LineTreeDemo { |
final private JTree tree; | final private JTree tree; | ||
public LineTreeDemo() { | public LineTreeDemo() { | ||
− | + | JFrame frame = new JFrame("Tree Lineselection"); | |
− | setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); | + | frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
− | setSize(400, 300); | + | frame.setSize(400, 300); |
− | setLocationRelativeTo(null); | + | frame.setLocationRelativeTo(null); |
tree = new LineTree(); | tree = new LineTree(); | ||
− | add(new JScrollPane(tree)); | + | frame.add(new JScrollPane(tree)); |
+ | frame.setVisible(true); | ||
} | } | ||
public static void main(final String args[]) throws Exception { | public static void main(final String args[]) throws Exception { | ||
− | new LineTreeDemo( | + | new LineTreeDemo(); |
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
− | < | + | <syntaxhighlight lang="java"> |
/* | /* | ||
* LineTree.java | * LineTree.java | ||
Zeile 130: | Zeile 131: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
[[Kategorie:Java]] | [[Kategorie:Java]] | ||
[[Kategorie:Swing]] | [[Kategorie:Swing]] | ||
[[Kategorie:Java-Codeschnipsel]] | [[Kategorie:Java-Codeschnipsel]] |
Aktuelle Version vom 8. März 2020, 14:56 Uhr
Gewöhnlich wenn ein Knoten selektiert ist, hebt JTree nur den Text hervor:
Hier wird eine Möglichkeit gezeigt, die ganze selektierte Zeile in einem JTree hervorzuheben:
import javax.swing.*;
public class LineTreeDemo {
final private JTree tree;
public LineTreeDemo() {
JFrame frame = new JFrame("Tree Lineselection");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
tree = new LineTree();
frame.add(new JScrollPane(tree));
frame.setVisible(true);
}
public static void main(final String args[]) throws Exception {
new LineTreeDemo();
}
}
/*
* LineTree.java
*
* Normally, when a node is selected, the tree marks only the text.
* This shows one way to mark the whole selected line in a JTree.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class LineTree extends JTree {
final private Color SELECTION_COLOR = new Color(180, 210, 230, 90);
private Rectangle selectedRowBounds;
private boolean expand;//allows the MouseListener to detect "handles" action (->no row selection)
public LineTree() {
//Set the selection mode:
selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
//Adapt the default selection colors:
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) getCellRenderer();
renderer.setTextSelectionColor(Color.BLACK);
renderer.setBorderSelectionColor(Color.WHITE);
renderer.setBackgroundSelectionColor(Color.WHITE);
//Add the TreeSelectionListener:
selectionModel.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(final TreeSelectionEvent e) {
paintSelectionRect();
}
});
//Add the TreeExpansionListener:
addTreeExpansionListener(new TreeExpansionListener() {
@Override
public void treeCollapsed(final TreeExpansionEvent event) {
paintSelectionRect();
expand = true;
}
@Override
public void treeExpanded(final TreeExpansionEvent event) {
paintSelectionRect();
expand = true;
}
});
//Add MouseListener if you want to listen to whole line width:
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(final MouseEvent e) {
if (!expand) {
int row = getClosestRowForLocation(e.getX(), e.getY());
if (e.getClickCount() == 2) {
if (isCollapsed(row)) {
expandRow(row);
} else {
collapseRow(row);
}
} else {
setSelectionRow(row);
}
}
expand = false;
}
});
}
//This method is called in valueChanged, treeCollapsed and treeExpanded
//to paint the selection rectangle:
private void paintSelectionRect() {
//Get selected row bounds:
int[] rows = getSelectionRows();
if (rows == null) {
return;
}
selectedRowBounds = getRowBounds(rows[0]);
//Repaint the JTree:
repaint();
}
//Override paintComponent of JTree:
@Override
public void paintComponent(final Graphics g) {
super.paintComponent(g);
if (selectedRowBounds == null) {
return;
}
//Set selection Color:
g.setColor(SELECTION_COLOR);
//Draw selection rectangle using the width of JTree:
g.fillRect(0, (int) selectedRowBounds.getY(), getWidth(), (int) selectedRowBounds.getHeight());
}
}