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 }