ToolBar

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo nochmal,

ich verwende eine

Code:
private JToolBar btPanel;

wenn ich über einen JButton, welcher sich in der JToolBar befindet, dann macht sich ein JPanel auf (btPanel.setRollover(true);)

Meine Frage wäre jetzt folgende,
ich habe mein Programm im TaskManager beobachtet, wenn ich über den JButton gefahren bin und mein btPanel offen ist, dann braucht mein Programm 50% der CPU- Auslastung,
Wie ist das Möglich bzw. hat das schon mal jemand beobachtet?
Auch wenn die Maus stillsteht und das btPanel offen ist, ist die CPU- Auslastung um die 50%????

lg


Code:
 tree = new JTree(root[0]);  
        s = new JScrollPane();
        s.setPreferredSize(new Dimension(Control.states.elementAt(0).getJtreewidth(), 0));
        s.setViewportView(tree);         
        mainPanel = new JPanel(new BorderLayout());   
        tree.setRootVisible(false);    
        a = new MTabbedPane(Color.ORANGE, Color.LIGHT_GRAY, s);
        a.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
        mainPanel.add(a, BorderLayout.CENTER);  
        s.addMouseListener(this);
        tree.addMouseListener(this);        
        myRenderer = new JankTreeRenderer();
        tree.setCellRenderer(myRenderer);        
        btTree = new JButton();
        
        btTree.setFocusable(false);
        btTree.setMaximumSize(new Dimension(22, 120));
        btTree.setBackground(new Color(230, 230, 230));
        btTree.setForeground(new Color(100, 100, 100));
        Icon graphicIcon = UIManager.getIcon("Tree.closedIcon");
        btTree.setIcon(graphicIcon);
        btDrucken.setIcon(graphicIcon);
        VTextIcon textIcon = new VTextIcon(btTree, Control.states.elementAt(0).getJtreetoolbarname(), VTextIcon.ROTATE_LEFT);
        CompositeIcon icon = new CompositeIcon(graphicIcon, textIcon, CompositeIcon.BOTTOM);
        btTree.setIcon(icon);
        btTree.setEnabled(false);        
        btPanel.add(btTree);
        btPanel.addSeparator();
        icon = new CompositeIcon(graphicIcon, textIcon, CompositeIcon.BOTTOM);
        btPanel.setPreferredSize(new Dimension(28, 0));
        getContentPane().add(btPanel, BorderLayout.WEST);
        getContentPane().add(mainPanel);
        btTree.addMouseListener(this);
 
T

tuxedo

Gast
Hast du vielleicht versehentlich eine Schleife bei den Listenern drin ?
 

PollerJava

Top Contributor
Ich habs den Systemfresser gefunden, ich habe einen Renderer für meinen tree in der JToolBar:

Code:
tree.setCellRenderer(myRenderer);

und in der Klasse MyRenderer steht die Zeile:


Code:
 public Component getTreeCellRendererComponent(JTree tree1, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) 
        {        
         tree1.setFont(new Font("Arial", 0, 12));    // das hat mir 50% der Systemresourcen gefressen        
        return this;
        }

Gibts dafür eine andere Lösung oder eine Erklärung?

lg
 

Murray

Top Contributor
Die Erzeugung des Font-Objekts müsste man nicht jedesmal neu machen besser ist es, das Objekt nur einmal zu erzeugen und aufzubewahren, in etwa so:
Code:
private static Font cellFont;


public static getCellFont() {
  if ( cellFont == null) cellFont = new Font( /* ... */); //--- lazy-initialization

  return cellFont;
}

public Component getTreeCellRendererComponent( 
       JTree tree1, Object value, boolean sel, boolean expanded, 
       boolean leaf, int row, boolean hasFocus) {       

  tree1.setFont( getCellFont());       

  return this;
}

Aber warum setzt du den Font denn überhaupt hier (und damit bei jedem Rendern wieder) und nicht nur einmal direkt am Tree, z.B. an der Stelle, wo du jetzt den CellRenderer setzt?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M toolbar symbole "selbstmalen" oder woher? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben