TreeLineselection: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Die Seite wurde neu angelegt: „<code=java>/* * TreeLineselection.java * * Normally, when a node is selected, the tree marks only the text. * This shows one way to mark the whole selected li…“ |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
Gewöhnlich wenn ein Knoten selektiert ist, hebt JTree nur den Text hervor: | |||
[[Datei:TreeSelection.jpg]] | |||
Hier wird eine Möglichkeit gezeigt, die ganze selektierte Zeile in einem JTree hervorzuheben: | |||
[[Datei:TreeLineselection.jpg]] | |||
<code=java> | |||
import javax.swing.*; | import javax.swing.*; | ||
public class | public class LineTreeDemo extends JFrame { | ||
final private JTree tree; | final private JTree tree; | ||
public | public LineTreeDemo() { | ||
super("Tree Lineselection"); | super("Tree Lineselection"); | ||
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); | setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); | ||
setSize(400, 300); | setSize(400, 300); | ||
setLocationRelativeTo(null); | setLocationRelativeTo(null); | ||
tree = new | tree = new LineTree(); | ||
add(new JScrollPane(tree)); | add(new JScrollPane(tree)); | ||
} | } | ||
public static void main(final String args[]) throws Exception { | public static void main(final String args[]) throws Exception { | ||
new | new LineTreeDemo().setVisible(true); | ||
} | } | ||
} | } | ||
</code=java> | |||
class | <code=java> | ||
/* | |||
* 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); | final private Color SELECTION_COLOR = new Color(180, 210, 230, 90); | ||
private Rectangle selectedRowBounds; | private Rectangle selectedRowBounds; | ||
private boolean expand;//allows the MouseListener to detect "handles" action (->no row selection) | private boolean expand;//allows the MouseListener to detect "handles" action (->no row selection) | ||
public | public LineTree() { | ||
//Set the selection mode: | //Set the selection mode: | ||
selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); | selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); | ||
| Zeile 46: | Zeile 60: | ||
//Add the TreeSelectionListener: | //Add the TreeSelectionListener: | ||
selectionModel.addTreeSelectionListener(new TreeSelectionListener() { | selectionModel.addTreeSelectionListener(new TreeSelectionListener() { | ||
@Override | |||
public void valueChanged(final TreeSelectionEvent e) { | public void valueChanged(final TreeSelectionEvent e) { | ||
paintSelectionRect(); | paintSelectionRect(); | ||
| Zeile 53: | Zeile 68: | ||
//Add the TreeExpansionListener: | //Add the TreeExpansionListener: | ||
addTreeExpansionListener(new TreeExpansionListener() { | addTreeExpansionListener(new TreeExpansionListener() { | ||
@Override | |||
public void treeCollapsed(final TreeExpansionEvent event) { | public void treeCollapsed(final TreeExpansionEvent event) { | ||
paintSelectionRect(); | paintSelectionRect(); | ||
expand = true; | expand = true; | ||
} | } | ||
@Override | |||
public void treeExpanded(final TreeExpansionEvent event) { | public void treeExpanded(final TreeExpansionEvent event) { | ||
paintSelectionRect(); | paintSelectionRect(); | ||
| Zeile 66: | Zeile 83: | ||
//Add MouseListener if you want to listen to whole line width: | //Add MouseListener if you want to listen to whole line width: | ||
addMouseListener(new MouseAdapter() { | addMouseListener(new MouseAdapter() { | ||
@Override | @Override | ||
public void mousePressed(final MouseEvent e) { | public void mousePressed(final MouseEvent e) { | ||
| Zeile 84: | Zeile 101: | ||
} | } | ||
}); | }); | ||
} | } | ||
//This method is called in valueChanged, treeCollapsed and treeExpanded | //This method is called in valueChanged, treeCollapsed and treeExpanded | ||
//to paint the selection rectangle: | //to paint the selection rectangle: | ||
private void paintSelectionRect() { | private void paintSelectionRect() { | ||
//Get selected row bounds: | //Get selected row bounds: | ||
| Zeile 99: | Zeile 116: | ||
repaint(); | repaint(); | ||
} | } | ||
//Override paintComponent of JTree: | //Override paintComponent of JTree: | ||
@Override | @Override | ||
Version vom 6. September 2011, 14:03 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:
<code=java> import javax.swing.*;
public class LineTreeDemo extends JFrame {
final private JTree tree;
public LineTreeDemo() {
super("Tree Lineselection");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
tree = new LineTree();
add(new JScrollPane(tree));
}
public static void main(final String args[]) throws Exception {
new LineTreeDemo().setVisible(true);
}
} </code=java>
<code=java> /*
* 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());
}
} </code=java>


