java在JPanel上绘制并将JPanel添加到JFrame
我需要通过重写JPanel的paintComponent()方法在JPanel上绘制一个图
当我在JFrame上拖放JPanel时,使用netbeans设计gui时,它通过创建一个私有变量JPanel object生成代码。在这种情况下,我如何覆盖它的方法来绘制它
或者,如果我通过扩展JPanel为一个类编写代码并重写该方法来绘制它,我必须创建一个新的JFrame并将JPanel添加到其中
JFrame fr=新JFrame(); fr.add(窗格)//pane是类的对象,它扩展了我在其中绘制的JPanel fr.setVisible(真)
在这种情况下,它是有效的
但是,如果我得到一个自动创建的类的引用,该类通过netbeans扩展JFrame,并使用该引用的add方法添加JPanel,那么它就不起作用了
class x extends JPanel
{
paintComponent(Graphics g){ //overridden method
//my code for drawing say lines goes here..
}
}
class y extends Thread
{
z obj;
y(z obj){
this.obj=obj;
}
public void run(){
x pane=new x();
pane.setVisible(true);
obj.add(pane);
obj.setVisible(true); //im not getting the pane visible here.. if i created a new JFrame class here as i said earlier and added the pane to it i can see it..
}
}
class z extends JFrame
{
z(){//code generated by netbeans}
public static void main(String args[])
{
new y(new z()).start();
}
}
它没有显示错误,但当我运行程序时,只有Jframe可见。。JPanel没有显示
如果这个问题很愚蠢,请原谅。。我是初学者
提前谢谢
# 1 楼答案
你的代码相当混乱。无论如何,而不是
你需要
# 2 楼答案
听起来你是个挥杆初学者。然而,使用库JXLayer使得在组件上绘制变得非常简单和直观
查看他们的演示和示例代码
否则,优秀的JFreeChart是一个伟大的、免费的Java绘图(和可视化)库
# 3 楼答案
代码的行为是不可预测的,因为您违反了Swing开发的主要规则:所有UI工作都应该在事件调度线程(EDT)上完成。您的代码应该如下所示:
有关该主题的更多信息,请参见: http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html