001 package org.shiftone.jrat.provider.tree.ui.trace;
002
003
004 import org.jdesktop.swingx.JXTable;
005 import org.shiftone.jrat.desktop.util.JXTableWatcher;
006 import org.shiftone.jrat.provider.tree.ui.TraceTreeNode;
007 import org.shiftone.jrat.provider.tree.ui.trace.stack.StackTableModel;
008 import org.shiftone.jrat.ui.util.PercentTableCellRenderer;
009 import org.shiftone.jrat.util.Assert;
010
011 import javax.swing.*;
012 import java.awt.*;
013 import java.util.prefs.Preferences;
014
015
016 public class NodeDetailPanel extends JPanel {
017
018 private StackTableModel stackTableModel = null;
019 private JLabel methodLabel;
020
021 public NodeDetailPanel() {
022
023
024 methodLabel = new JLabel();
025
026 // ----- [ Stack ] -----
027 stackTableModel = new StackTableModel();
028 JXTable stackTable = new JXTable(stackTableModel);
029 stackTable.setColumnControlVisible(true);
030 stackTable.setSortable(false);
031
032 JXTableWatcher.initialize(
033 stackTable,
034 Preferences.userNodeForPackage(NodeDetailPanel.class).node("columns"),
035 StackTableModel.getColumns());
036
037 PercentTableCellRenderer.setDefaultRenderer(stackTable);
038
039 setLayout(new BorderLayout());
040 add(new JScrollPane(stackTable), BorderLayout.CENTER);
041 add(methodLabel, BorderLayout.NORTH);
042 }
043
044
045 public synchronized void setStackTreeNode(TraceTreeNode root, TraceTreeNode node) {
046
047 Assert.assertNotNull("root", root);
048 Assert.assertNotNull("node", node);
049
050 if (node.isRootNode()) {
051 methodLabel.setText("");
052 } else {
053 methodLabel.setText(" " + node.getMethodKey().getShortMethodDescription());
054 }
055
056 stackTableModel.setStackTreeNode(root, node);
057 }
058 }