2012-03-30 7 views
0

Ich habe ein Problem in einer Schnittstelle, die ich in Java mache. Es funktioniert korrekt für JPanel, JTextField, JCheckBox, JRadioButton und JButton, sie werden alle korrekt dargestellt. Aber JComboBox nicht. Es malt nur die Hintergrundfarbe, die eingestellt wurde.JComboBox nicht malen

Aufgrund der Komplexität des Projekts, keine dieser Komponenten zu einem Container hinzugefügt werden, sind aber virtuell vorhanden, und sind auf den Container gemalt, andere Komponenten funktionieren, so glaube ich nicht, dass das Problem ist: Hier ist die Schaffung Code:

paintableComponent = new JComboBox(new String[]{"test"}); 

und die Farbe Code, dann ist dies in einer Pseudokomponente

if(this.getParentComponent() != null && this.getParentComponent() instanceof Component && !((Component)this.getParentComponent()).getValue("style.overflow").equals("visible")){ 
    g.setClip(this.getParentComponent().getX(), this.getParentComponent().getY(), this.getParentComponent().getWidth(), this.getParentComponent().getHeight()); 
} 
Graphics oldG = g; 
g = g.create(getX(), getY(), getWidth(), getHeight()); 
paintableComponent.paint(g); 
g = oldG; 
Iterator<Component> i = children.iterator(); 
while(i.hasNext()){ 
    i.next().paint(g); 
} 

Vielen Dank im Voraus

+0

für bessere Hilfe schneller Fragen mit [SSCCE] (http://sscce.org/) – mKorbel

+1

Das Problem herausstellen, war, weil ich manuell die Grenzen der realen Komponente als die Pseudokomponente festgelegt wurde. Dies funktioniert gut bei Komponenten ohne Kinder, aber ansonsten fehlgeschlagen. Die Lösung bestand darin, die setBounds-Methode der JComboBox zu überschreiben, um die Einstellung der Kindergrenzen zu ermöglichen. –

Antwort

3

JComboBox hat Kinderkomponenten, die ausgelegt werden müssen. Versuchen Sie, vor dem Malen jComboInstance.setSize() aufzurufen, um es untergeordneten Elementen zuzuordnen.

+0

Batterie nicht enthalten +1 – mKorbel