TreeLineselection: Unterschied zwischen den Versionen
Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen (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…“) |
K |
||
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>