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));
}
}
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
Vielleicht finden Sie etwas nützlich von [this thread] (http://stackoverflow.com/questions/6089410/decoating-a-jtextfield-with-animage-and-hint) zum selben Thema. –
nach diesem Thread bekomme ich den gleichen Fehler NullPointerException Zeile 36 (this.dummyInsets = border.getBorderInsets (dummy);) –