# JPanel.getWidth() liefert immer 0



## Phil_gdm (17. Aug 2005)

Ich habe ein JPanel mit Unterkomponenten in folgender Form (ich hoffe das ist verständlich

contractspanel [JPanel]  Layout = GridBagLayout
|
+----mainpanel [JPanel] Layout = NullLayout
|       |
|       +----contractscroll [JScrollpane]
|              |
|              +----contract [JList]
|
+----southpanel [JPanel] Layout = NullLayout
|
+----eastpanel [JPanel] Layout = NullLayout

Mein Problem ist, dass wenn ich die Methode mainpanel.getWidth() aufrufe diese mir immer 0 zurückgibt (das ist auch für die anderen Panels so).
Mein Fragen sind nun
1.) soll das so sein? 
2.) falls dem so ist, wie kann ich die Größer des Panels dann herausfinden?


----------



## Oni (17. Aug 2005)

servus,

ich denke mal das hängt damit zusammen wann du abfragst. du fragst wahrscheinlich direkt nach der "erzeugung" oder?

test mal das:


```
JPanel p = new JPanel();
System.out.println(p.getWidth()); // liefert 0
p.setSize(50,50);
System.out.println(p.getWidth()); // liefert 50
```

oder 


```
JPanel p = new JPanel();
System.out.println(p.getWidth()); // liefert 0
JButton b = new JButton("Test");
p.add(b);
System.out.println(p.getWidth()); // liefert irgendwas > 0
```


wenn ein Panel einen inhalt hat oder eine größe festgelegt wurde, liefert getWidth() auch einen wert > 0.


----------



## Phil_gdm (17. Aug 2005)

Oni hat gesagt.:
			
		

> du fragst wahrscheinlich direkt nach der "erzeugung" oder?



Nein eigentlich nicht. Ich habe die Oberfläche mit NetBeans 4.1 erstellt.

Das getWidth rufe ich erst nach dem Aufruf der von NetBeans erzeugten Methode initComponents auf.
Da sollten die Größen der Komponenten eigentlich schon stimmen nehme ich mal an.


----------



## Oni (17. Aug 2005)

ich habe noch nie was mit netbeans gemacht, aber ich denkemal netbeans erzeugt auch alles im konstruktor bzw ruf aus dem konstruktor heraus eine methode auf oder? 

wenn ja, schreib deine abfrage mal an letzter stelle in den konstruktor.


----------



## Phil_gdm (17. Aug 2005)

Hat leider auch nichts gebracht. 
Hab auch probiert, ob es funktioniert wenn ich die Funktion erst nach dem Konstruktor aufrufe, aber immer das gleiche 0. Hat es vielleicht was mit dem Grid-Bag Layout bzw. Layoutmanagern allgemein zu tun?


----------



## Oni (17. Aug 2005)

glaube ich nicht, ich benutze auch layoutmanger und bei mir funzt es. 
haben die panel den überhaupt einen inhalt? Button's, Label's oder sowas ? 

poste doch einfach mal etwas code.


----------



## Phil_gdm (17. Aug 2005)

2 der Drei Panels haben derzeit keinen Inhalt. Das 3 hat ein JScrollPane und eine JList


```
/*
 * ContractEditorScreen.java
 *
 * Created on 17. August 2005, 11:34
 */

package MrSystem;

import javax.swing.*;
import java.awt.*;
import java.sql.*;
import java.util.*;

/**
 *
 * @author  Phil
 */
public class ContractEditorScreen extends javax.swing.JPanel
{
  
  private final int BORDER = 10;
  
  private ArrayList<ParagraphT> pts;
  private ArrayList<ParagraphT> selpts = new ArrayList<ParagraphT>();
  
  MainFrame       parent;
  
  /** Creates new form ContractEditorScreen */
  public ContractEditorScreen(MainFrame _parent)
  {
    initComponents();
    parent = _parent;
    ArrangeControls();
    LoadParagraphTemplates();
  }
  
  public void ArrangeControls()
  {
    contractscroll.setLocation(BORDER, BORDER);
    contractscroll.setSize(mainpanel.getWidth() - 2 * BORDER, 
      mainpanel.getHeight() - 2 * BORDER);
    
    paragraphtemplates.setLocation(new Point(BORDER, BORDER));
    paragraphtemplates.setSize(eastpanel.getWidth() - 2 * BORDER, 
      eastpanel.HEIGHT - 3 * BORDER * addtemplate.HEIGHT);
    
    addtemplate.setSize(paragraphtemplates.WIDTH, addtemplate.HEIGHT);
  }
  
  private void LoadParagraphTemplates()
  {
    try
    {
      pts = DbSystem.INSTANCE.getDBase().getParagraphTs().GetAllParagraphTs();
      String[] elements = new String[pts.size()];
      for(int i = 0; i < pts.size(); i++)
        elements[i] = pts.get(i).getName();
      paragraphtemplates.setListData(elements);
    }
    catch(SQLException e)
    {
      MrUtils.ErrorMsgBox("FATAL ERROR [LoadParagraphTemplates]\n" + e);
    }
  }
  
  /** This method is called from within the constructor to
   * initialize the form.
   * WARNING: Do NOT modify this code. The content of this method is
   * always regenerated by the Form Editor.
   */
  // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
  private void initComponents()
  {
    java.awt.GridBagConstraints gridBagConstraints;

    mainpanel = new javax.swing.JPanel();
    contractscroll = new javax.swing.JScrollPane();
    contract = new javax.swing.JList();
    southpanel = new javax.swing.JPanel();
    eastpanel = new javax.swing.JPanel();
    paragraphtemplatesscroll = new javax.swing.JScrollPane();
    paragraphtemplates = new javax.swing.JList();
    addtemplate = new javax.swing.JButton();

    setLayout(new java.awt.GridBagLayout());

    mainpanel.setLayout(null);

    mainpanel.setBackground(new java.awt.Color(51, 0, 204));
    contractscroll.setPreferredSize(new java.awt.Dimension(100, 50));
    contractscroll.setViewportView(contract);

    mainpanel.add(contractscroll);
    contractscroll.setBounds(10, 10, 380, 330);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.gridheight = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.weighty = 1.0;
    add(mainpanel, gridBagConstraints);

    southpanel.setLayout(null);

    southpanel.setBackground(new java.awt.Color(0, 153, 0));
    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 0;
    gridBagConstraints.gridy = 2;
    gridBagConstraints.gridwidth = 2;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.weightx = 1.0;
    gridBagConstraints.weighty = 0.5;
    add(southpanel, gridBagConstraints);

    eastpanel.setLayout(null);

    eastpanel.setBackground(new java.awt.Color(255, 102, 102));
    paragraphtemplatesscroll.setViewportView(paragraphtemplates);

    eastpanel.add(paragraphtemplatesscroll);
    paragraphtemplatesscroll.setBounds(10, 20, 180, 440);

    addtemplate.setText("Hinzuf\u00fcgen");
    addtemplate.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(java.awt.event.ActionEvent evt)
      {
        addtemplateActionPerformed(evt);
      }
    });

    eastpanel.add(addtemplate);
    addtemplate.setBounds(10, 470, 180, 23);

    gridBagConstraints = new java.awt.GridBagConstraints();
    gridBagConstraints.gridx = 2;
    gridBagConstraints.gridy = 0;
    gridBagConstraints.gridheight = 3;
    gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
    gridBagConstraints.weightx = 0.5;
    gridBagConstraints.weighty = 1.0;
    add(eastpanel, gridBagConstraints);

  }
  // </editor-fold>                        

  private void addtemplateActionPerformed(java.awt.event.ActionEvent evt)                                            
  {                                                
    selpts.add(pts.get(paragraphtemplates.getSelectedIndex()));
   
    String[] elements = new String[selpts.size()];
    for(int i = 0; i < selpts.size(); i++)
      elements[i] = selpts.get(i).getName();
    contract.setListData(elements);
  }                                           
  
  
  // Variables declaration - do not modify                     
  private javax.swing.JButton addtemplate;
  private javax.swing.JList contract;
  private javax.swing.JScrollPane contractscroll;
  private javax.swing.JPanel eastpanel;
  private javax.swing.JPanel mainpanel;
  private javax.swing.JList paragraphtemplates;
  private javax.swing.JScrollPane paragraphtemplatesscroll;
  private javax.swing.JPanel southpanel;
  // End of variables declaration                   
  
}
```


----------

