创建一个在激活actionListener时在applet上绘制的方法

时间:2014-03-05 19:10:19

标签: java arrays if-statement graphics applet

问题:我正在尝试添加使用Java内置图形方法的多个方法。绘制到屏幕的方法使用if语句。

我尝试过的方法:使用方法名称并更改(图形g)中的字符。此外,我试图将我遇到问题的方法放入paint方法块中。

使用的变量:

  • wordLengths =一个存储具有一定长度的单词数量的数组。例如。如果我有1个字母的单词,wordLengths [0]将为1。

以下代码打印我的姓名首字母,删除文本字段并绘制图表的x轴和y轴:

public void paint(Graphics g) {
        g.drawString("BWD", 450, 490);    // Puts my signature in the bottom corner
        inputField.setText("");
        inputText = ("");
        g.drawLine(50, 450, 460, 450);//Paints  x-axis
        g.drawLine(50, 450, 50, 100);//Paints the y-axis
    }

以下代码的方法名称为paint。我试图改变它,但它仍然会返回问题。单击提交按钮时,我希望以下代码绘制到屏幕上:

public void paint (Graphics g)
{
        for(int j=0, x=50, y = 100; j< wordLengths.length;j++)
        {
            if (wordLengths[j] == 1)
            {
                y = y+15;
                g.drawString(wordLengths[j]+ " word of length "+ (j+1), x, y);                              
            }

            g.drawString("There are: ", 50, 90);

            if (wordLengths[j] > 1)
            {
                y = y+15;
                g.drawString(wordLengths[j]+ " words of length "+ (j+1), x, y);
            }
        }
    }

理想的代码是:

public void paint(Graphics g) {
            g.drawString("BWD", 450, 490);    // Puts my signature in the bottom corner
            inputField.setText("");
            inputText = ("");
            g.drawLine(50, 450, 460, 450);//Paints  x-axis
            g.drawLine(50, 450, 50, 100);//Paints the y-axis

           for(int j=0, x=50, y = 100; j< wordLengths.length;j++)
            {
                if (wordLengths[j] == 1)
                {
                    y = y+15;
                    g.drawString(wordLengths[j]+ " word of length "+ (j+1), x, y);                              
                }

                g.drawString("There are: ", 50, 90);

                if (wordLengths[j] > 1)
                {
                    y = y+15;
                    g.drawString(wordLengths[j]+ " words of length "+ (j+1), x, y);
                }
            }

        }

如果需要任何其他信息,请不要犹豫,添加评论,我会非常快速地加入评论!

提前致谢!

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at java_assignment.JavaAppletMain.paint(JavaAppletMain.java:114)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:264)
at sun.lwawt.LWRepaintArea.paintComponent(LWRepaintArea.java:54)
at sun.awt.RepaintArea.paint(RepaintArea.java:240)
at sun.lwawt.LWComponentPeer.handleJavaPaintEvent(LWComponentPeer.java:1267)
at sun.lwawt.LWComponentPeer.handleEvent(LWComponentPeer.java:1150)
at java.awt.Component.dispatchEventImpl(Component.java:4937)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91))

    Thread [AWT-EventQueue-1] (Suspended (breakpoint at line 112 in JavaAppletMain))    
    JavaAppletMain.paint(Graphics) line: 112    
    LWRepaintArea(RepaintArea).paintComponent(Component, Graphics) line: 264    
    LWRepaintArea.paintComponent(Component, Graphics) line: 54  
    LWRepaintArea(RepaintArea).paint(Object, boolean) line: 240 
    LWPanelPeer(LWComponentPeer<T,D>).handleJavaPaintEvent() line: 1267 
    LWPanelPeer(LWComponentPeer<T,D>).handleEvent(AWTEvent) line: 1150  
    JavaAppletMain(Component).dispatchEventImpl(AWTEvent) line: 4937    
    JavaAppletMain(Container).dispatchEventImpl(AWTEvent) line: 2287    
    JavaAppletMain(Component).dispatchEvent(AWTEvent) line: 4687    
    EventQueue.dispatchEventImpl(AWTEvent, Object) line: 735    
    EventQueue.access$200(EventQueue, AWTEvent, Object) line: 103   
    EventQueue$3.run() line: 694    
    EventQueue$3.run() line: 692    
    AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]    
    ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76    
    ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 87  
    EventQueue$4.run() line: 708    
    EventQueue$4.run() line: 706    
    AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]    
    ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76    
    EventQueue.dispatchEvent(AWTEvent) line: 705    
    EventDispatchThread.pumpOneEventForFilters(int) line: 242   
    EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 161    
    EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 150   
    EventDispatchThread.pumpEvents(int, Conditional) line: 146  
    EventDispatchThread.pumpEvents(Conditional) line: 138   
    EventDispatchThread.run() line: 91  

1 个答案:

答案 0 :(得分:3)

您只是在wordLenghts中初始化数组actionPerformed。但是在程序启动时调用paint,并且从未调用actionPerformed来初始化数组。这就是为什么你得到NPE

您应该在构造函数或init方法中初始化它。

private int[] wordLength;

@Overrde
public void init() {
    wordLength = new int[0];
}