gpt4 book ai didi

java - 绘制 JPanel 并将 JPanel 添加到 JFrame

转载 作者:行者123 更新时间:2023-11-30 09:58:00 25 4
gpt4 key购买 nike

我需要通过覆盖 JPanel 的 paintComponent() 方法在 JPanel 上绘制图形。

在使用 netbeans 设计 gui 时,当我将 JPanel 拖放到 JFrame 上时,它会通过创建私有(private)变量 JPanel 对象来生成代码。在这种情况下,我如何重写它的方法来绘制它...

否则,如果我通过扩展 JPanel 为类编写代码并覆盖绘制它的方法,我必须创建一个新的 JFrame 并将 JPanel 添加到其中。

JFrame fr=new JFrame();fr.add( Pane );//pane 是在我绘制的地方扩展 JPanel 的类的对象fr.setVisible(true);

在这种情况下它有效..

但是如果我得到一个自动创建的类的引用,它通过 netbeans 扩展 JFrame 并使用它来使用引用的添加方法添加 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 未显示...

如果问题很愚蠢,请原谅我..我是初学者..

提前致谢...

最佳答案

您的代码的行为是不可预测的,因为您违反了 Swing 开发的主要规则:所有 UI 工作都应在事件调度线程 (EDT) 上完成。您的代码应类似于:

public static void main(String args[]) { 
SwingUtilities.invokeLater( new Runnable() {
void run()
{
JFrame z = new JFrame();
z.add(new X()); // works only in java 6
//z.getContentPane().add(new X()); // works in any version of java
z.pack(); // assuming your pane has preferred size
z.setVisible(true);

}
});
}

关于这个主题的更多信息在这里: http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

关于java - 绘制 JPanel 并将 JPanel 添加到 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1316035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com