我看了几篇其他帖子,我还没有找到一个明确的答案。我不完全理解油漆方法,这可能是我的问题,但我无处可寻找清楚的解释。有人能帮助我让这个工作吗?问题是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
答案 0 :(得分:2)
你的家庭作业好友迟到了!
移动窗口,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的阅读......