2016-03-22 25 views
-1

Ich versuche, einige schön aussehende JTextFields mit einem Bild und einem Hinweis zu erstellen. Ich folgte diesem Tutorial https://gmigdos.wordpress.com/2010/03/30/java-a-custom-jtextfield-for-searching/.ein benutzerdefiniertes JtextField

Der Fehler, den ich bekommen habe, ist dies:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at com.jd.swing.custom.component.jtextfield.JIconTextField.paintComponent(JIconTextField.java:53) 
at com.jd.swing.custom.component.jtextfield.JSearchTextField.paintComponent(JSearchTextField.java:49) 
at javax.swing.JComponent.paint(JComponent.java:1054) 
at javax.swing.JComponent.paintChildren(JComponent.java:887) 
at javax.swing.JComponent.paint(JComponent.java:1063) 
at javax.swing.JComponent.paintChildren(JComponent.java:887) 
at javax.swing.JComponent.paint(JComponent.java:1063) 
at javax.swing.JComponent.paintChildren(JComponent.java:887) 
at javax.swing.JComponent.paint(JComponent.java:1063) 
at javax.swing.JComponent.paintChildren(JComponent.java:887) 
at javax.swing.JComponent.paint(JComponent.java:1063) 
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585) 
at javax.swing.JComponent.paintChildren(JComponent.java:887) 
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5228) 
at javax.swing.RepaintManager.paint(RepaintManager.java:1209) 
at javax.swing.JComponent.paint(JComponent.java:1040) 
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39) 
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78) 
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115) 
at java.awt.Container.paint(Container.java:1967) 
at java.awt.Window.paint(Window.java:3877) 
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:781) 
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701) 
at java.awt.EventQueue.access$000(EventQueue.java:102) 
at java.awt.EventQueue$3.run(EventQueue.java:662) 
at java.awt.EventQueue$3.run(EventQueue.java:660) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:671) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 

JIconTextField.java

public class JIconTextField extends JTextField{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -8242515712056236296L; 
    private Icon icon; 
    private Insets dummyInsets; 

    public JIconTextField(){ 
     super(); 
     this.icon = null; 

     Border border = UIManager.getBorder("TextField.border"); 
     JTextField dummy = new JTextField(); 
     if(border!=null){ 
      this.dummyInsets = border.getBorderInsets(dummy); 
     }else{ 
      this.dummyInsets = null; 
     } 
    } 

    public void setIcon(Icon icon){ 
     this.icon = icon; 
    } 

    public Icon getIcon(){ 
     return this.icon; 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     int textX = 2; 

     if(this.icon!=null){ 
      int iconWidth = icon.getIconWidth(); 
      int iconHeight = icon.getIconHeight(); 
      int x = dummyInsets.left -5;//this is our icon's x 
      textX = x+iconWidth+2; //this is the x where text should start 
      int y = (this.getHeight() - iconHeight)/2; 
      icon.paintIcon(this, g, x, y); 
     } 
     setMargin(new Insets(2, textX, 2, 2)); 
    } 
} 
+0

Die Zurückverfolgungs sagt Ihnen, dass Sie eine Null auf li dereferenzieren ne 49 oder 53 in Ihrer JIconTextField-Klasse. Der Code, den Sie gepostet haben, ist nicht der gesamte Code dieser Klasse. Daher kann ich nicht sagen, um welche Zeile es sich handelt, aber Ihr Code muss die Möglichkeit berücksichtigen, dass "dummyInsets" null ist. – FredK

+0

Vielleicht finden Sie etwas nützlich von [this thread] (http://stackoverflow.com/questions/6089410/decoating-a-jtextfield-with-animage-and-hint) zum selben Thema. –

+0

nach diesem Thread bekomme ich den gleichen Fehler NullPointerException Zeile 36 (this.dummyInsets = border.getBorderInsets (dummy);) –

Antwort

0

i dieses

if(this.icon!=null){ 
     int iconWidth = icon.getIconWidth(); 
     int iconHeight = icon.getIconHeight(); 
     int x = (dummyInsets==null) ? 0 : dummyInsets.left - 5; 
     textX = x+iconWidth+2; 
     int y = (this.getHeight() - iconHeight)/2; 
     icon.paintIcon(this, g, x, y); 
    } 

versucht und es funktionierte

+0

siehe meinen Kommentar in einer anderen Antwort, wo der Check sein sollte. – FredK

+0

Dies sollte keine Antwort, sondern eine Bearbeitung Ihres Posts sein – Frakcool

Verwandte Themen