Java:Paint方法不运行

时间:2012-02-24 21:25:03

标签: java methods paint

我看了几篇其他帖子,我还没有找到一个明确的答案。我不完全理解油漆方法,这可能是我的问题,但我无处可寻找清楚的解释。有人能帮助我让这个工作吗?问题是paint方法没有运行。其他一切似乎工作正常,但我没有看到椭圆形我告诉程序在框架中渲染。

import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;

@SuppressWarnings("serial")
public class TestObject extends Component {

    MouseResponder mouseListener = new MouseResponder();            // Creates a new mouse listener.

    WindowResponder windowListener = new WindowResponder();         // Creates a new window listener.

    Frame mainFrame = new Frame();                              // Makes a new frame.

public TestObject() {

    mainFrame.setSize(400,500);                                 // Makes the new frame 400 by 500 in size.

    mainFrame.setLocationRelativeTo(null);                      // Sets the location of the window to center it.

    mainFrame.setTitle("A Test program!");                      // Sets frame label.

    mainFrame.setBackground(new Color(199,199,199));            // Sets the background color of the window.

    mainFrame.addWindowListener(windowListener);                // Adds the window listener so close works.

    mainFrame.addMouseListener(mouseListener);                  // Adds the mouse listener to the frame.

    mainFrame.setVisible(true);                                 // Makes the new frame visible.

    System.out.println("[TestObject] Window" +                  // Prints a console message when main window is launched.
            " configured and launched.");


}

public void paint(Graphics pane) {

    System.out.println("[TestObject] Painting.");

    pane.setColor(Color.BLACK);
    pane.drawOval(10,10,10,10);

}

}

其他信息:

  • MouseResponder和WindowResponder是不同的功能类。

  • 上面看到的TestObject类由主类调用 创建一个新的TestObject。框架显示为I 指定。

感谢您的帮助! -Docithe

3 个答案:

答案 0 :(得分:2)

你的家庭作业好友迟到了!

  • 获取一个新的java文件。
  • 创建课程
  • 让它扩展JFrame
  • 覆盖paint方法
  • 在其中放入一个println
  • 采取第二个文件
  • 把主要内容放在里面
  • 实现您的第一堂课,并致电show

移动窗口,println应该打印出来,这意味着你的代码在paint中正在执行。 这是在OOP中实现它的方式,并且肯定在java中。阅读更多。

答案 1 :(得分:1)

paint()负责在组件可见时呈现组件。 至少在你的代码片段中,你没有将测试组件添加到框架中 - 因此,它不会显示而不会被绘制。

public TestObject() {
    //...
    mainFrame.add( this );
    //...
}

这仍然可能无效,因为您的测试组件是0x0像素。 所以你也

@Override
getPreferredSize(){
    return new Dimension( 20, 20 );
}

答案 2 :(得分:0)

你在这里混合两件事,创建一个框架并创建一个组件。如果我理解正确,你想创建一个框架,并在该框架内有一个自定义组件绘制一个椭圆形。

组件就是这样:

public class TestObject extends Component {
    public void paint(Graphics pane) {
        System.out.println("[TestObject] Painting.");
        pane.setColor(Color.BLACK);
        pane.drawOval(10,10,10,10);
    }
}

你的主程序看起来更像是这样:

public static void main(String[] args)
{
    MouseResponder mouseListener = new MouseResponder();
    WindowResponder windowListener = new WindowResponder();
    Frame mainFrame = new Frame();
    mainFrame.setSize(400,500);
    mainFrame.setLocationRelativeTo(null);
    mainFrame.setTitle("A Test program!");
    mainFrame.setBackground(new Color(199,199,199));
    mainFrame.addWindowListener(windowListener);
    mainFrame.addMouseListener(mouseListener);
    mainFrame.add(new TestObject());
    mainFrame.setVisible(true);
}

我并不是说这个代码会运行,但是它将两个东西分成它们应该是什么,一个创建框架的主程序和一个绘制椭圆的组件。我更同意Snicolas的阅读......