2013-12-16 66 views
0

有一个非常简单的问题,我以前没有遇到过。在做项目之前,我使用了类似的布局。JFrame不绘画矩形

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

class q1 
{ 
    public static void main (String Args []) 
    { 
     q1Window showMe = new q1Window(); 
    } 
} 

class q1Window 
{ 
    q1Window() 
    { 
     JFrame window = new JFrame("Tutorial 1"); 
     window.setSize(600,600); 
     window.setVisible(true); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint (Graphics back) 
    { 
     back.setColor(Color.black); 
     back.fillRect(30,30,100,200);   
    } 
} 

现在我似乎无法打印任何东西,但JFrame显示。

回答

5

你不能只将paint()方法添加到任何类。只有Swing组件具有绘画方法。

阅读Swing教程Custom Painting的部分以获取更多信息和工作示例。

快速总结是您需要覆盖JPanel的paintComponent()方法,然后将面板添加到框架。

-2

正如camickr指出的那样,您需要一个Swing组件来完成您想要的任务,在这种情况下,您将覆盖paint(),但您应该重写paintComponent()

试试这个:

class q1 { 

    public static void main(String Args[]) { 
     q1Window showMe = new q1Window(); 
    } 
} 

class q1Window extends JFrame { 

    q1Window() { 
     setTitle("Tutorial 1"); 
     setSize(600, 600); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void paint(Graphics back) { 
     back.setColor(Color.black); 
     back.fillRect(30, 30, 100, 200); 
    } 
} 
+2

-1覆盖'顶层容器paint',-1未能调用'super.paint',打破油漆链条,更何况INTIAL线程 – MadProgrammer

+0

- 1,这是一个可怕的例子。 @bobski,这不是学习如何编程的方法。仅仅因为这只是对现有代码的一些更改并不意味着您应该使用该建议。已经给出了适当的方法,我建议你阅读你给的教程链接并学习基础知识。 – camickr

+0

嗯,我没有使用任何提及的最佳实践,这是我的不好。这绝不是推荐的方式。我刚刚发布了一些适用于这种情况的东西。 – victorantunes