2016-03-22 20 views
-1

私は、イメージとヒントを使ってより美しいJTextFieldを作成しようとしています。私はこのチュートリアルhttps://gmigdos.wordpress.com/2010/03/30/java-a-custom-jtextfield-for-searching/に従った。カスタムJtextField

私は取得していますエラーは、このです:

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

働いていましたあなたは李にヌルを参照していますJIconTextFieldクラスの49または53です。あなたが投稿したコードは、そのクラスのコード全体ではないので、どの行にあるのかはわかりませんが、あなたのコードは "dummyInsets"がnullである可能性を考慮する必要があります。 – FredK

+0

同じトピックについて、[this thread](http://stackoverflow.com/questions/6089410/decorating-a-jtextfield-with-an-image-and-hint)から便利なものが見つかるかもしれません。 –

+0

このスレッドによると、同じエラーが発生しています。NullPointerException 36行目(this.dummyInsets = border.getBorderInsets(dummy);) –

答えて

0

私はこの

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); 
    } 

しようと、それはトレースバックがあなたを語っている

+0

チェックがどこにあるべきかについての別の答えで私のコメントを参照してください。 – FredK

+0

これは回答ではなく、記事の編集です – Frakcool