JAVA_Graphics绘图问题,不继承JFrame如何绘图?

package Paint;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo2
{
JFrame frm = new JFrame();
JButton bu1 = new JButton("画椭圆");
JButton bu2 = new JButton("画圆");
GridBagLayout gbLayout = new GridBagLayout();
public Demo2()
{//我想在程序初始化的时候,在frm上花一串字符串
frm.setLayout(gbLayout);
frm.add(bu1, new GridBagConstraints(1, 2, 1, 1, 1, 1, GridBagConstraints.SOUTH, GridBagConstraints.NONE, new Insets(0, 0,
0, 0), 40, 30));
frm.add(bu2, new GridBagConstraints(3, 2, 1, 1, 1, 1, GridBagConstraints.SOUTH, GridBagConstraints.NONE, new Insets(0, 0,
0, 0), 40, 30));
Graphics g = frm.getGraphics();//获取frm的绘图区域,我想在程序初始化的时候,在frm上画一行字
g.drawString("点击按钮画图形", 10, 100);//此行发生空指针异常
bu1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Graphics g = frm.getGraphics();
g.drawOval(20, 80, 40, 40);//这里为什么不发生!?
}
});
bu2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Graphics g = frm.getGraphics();
g.drawRect(80, 80, 40, 40);
}
});
frm.setBounds(400, 400, 400, 400);
frm.setDefaultCloseOperation(3);
frm.setVisible(true);
}
public static void main(String[] args)
{
new Demo2();
}
}
问题在注释里面。通过继承JFrame并重写paint方法的方法我已经搞定了,我想改一改,但是出现了问题

这个问题我也遇到过,不过我的是Jpanel的,问了很多,有的说Jpanel是轻量级的组建,要放到JFrame里,我放了还是 不行,直接用JFrame,getGraphics(),返回的也是空指针。

有的说是,JFrame必须是显示无遮挡的情况下getGraphics()才有返回值,结果依旧没有解决这个问题,后来用Graphics2D解决了。

其实,我在想........难道要先stevisible(true)再调用getgraphics?

希望对你有些帮助,找到解决方法,告诉我一下。追问

你用Graphics2D怎么解决的

追答

忘记了,当时也是在网上抄的,不过好像先JFrame.setVisible(true)之后真的能得到返回值。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-17
只能在new 的时候这样写
new JFrame(){
public void paint(){

}
};
还不如继承后重写paint()方法

JAVA_Graphics绘图问题,不继承JFrame如何绘图?
这个问题我也遇到过,不过我的是Jpanel的,问了很多,有的说Jpanel是轻量级的组建,要放到JFrame里,我放了还是 不行,直接用JFrame,getGraphics(),返回的也是空指针。有的说是,JFrame必须是显示无遮挡的情况下getGraphics()才有返回值,结果依旧没有解决这个问题,后来用Graphics2D解决了。其实,...

java中Graphics绘图问题
swing组件上最好不要add上awt组件,这里panel不要用java.awt.Panel panel是javax.swing.JPanel 对象的话,注意得设为透明的:setOpaque(false);另外,panel上的图片如果是作为背景,上面还需要加其他组件的话,注意在重写的paint方法 里面,必须加上一行:super.paint(g); ,且要放在绘图语句之后,原...

JAVA JFrame Graphics绘画不显示问题
第一:用javax.swing.Timer类.定时更新JFrame外面绘制的图形,防止被JFrame的paint覆盖掉 第二:写一个JFrame的子类,重写JFrame的paint方法 个人强烈推荐第二种方法!import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class DemoP...

java.awt.frame 设置背景图片,不是用JFrame 直接用的Frame 建立的窗口...
import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.io.*;import javax.imageio.ImageIO;import javax.swing.*; class myFrame extends Frame { Button bt;public myFrame() {bt= new Button("按钮");JPanel jp = new JPanel();jp.add(bt);jp.setOpaque(...

关于java Graphics类的drawImages方法!!急!!!
一般用JFrame来使用Graphics画图,都会将画的方法或接口放到paint事件中,通过一些变量或方法来控制画图,这样所画片才会正常显示出来,不然会产生你现在看不到图片的问题。建议:在有多个画图方法存在的时候最好使用双缓冲方法,这样可以避免闪烁问题。本来我写了好详细的,说我内容有不可发表内容,检查了几...

java中给frame(不是JFrame)设置背景,如何不覆盖组件
可以直接重写Frame的paint方法 , 但是不推荐,推荐重写Panel的paint方法方法即可,在paint方法里, 绘制背景图片 import java.awt.Button;import java.awt.EventQueue;import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Panel;import java.awt.TextField;import java.awt...

怎么用JAVA画半个圆或者是半圆弧?
画圆一般通过继承JPanel 或者JFrame ,通过调用panel或者frame中的Graphics实例完成画图。java绘图的基本原理:画一个圆 import javax.swing.*;import java.awt.*;public class DrawCicle extends JFrame{MyPanel mp=null;public static void main(String[] args) {DrawCicle dc=new DrawCicle();} pub...

JAVA 关于JFrame的问题,我的图片会被线条给覆盖住,怎样让图片在上面呢...
当你画完线后,用jLabel.repaint()方法重载jLabel,jLabel就会在这条线的上边。import java.awt.Graphics;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;public class TestGui { public static void main(String[] args) { JFrame frame=new Frame();...

java JFrame截图画矩形的问题
private boolean isGraphicsImage = false;public static void main(String[] args) { new TansluFrame();} public TansluFrame() { AWTUtilities.setWindowOpacity(this, 0.7f); \/\/ 设置窗体半透明 this.setExtendedState(JFrame.MAXIMIZED_BOTH);\/\/ 设置窗口最大化 this.setUndecorated(true);this....

关于java中画图形的paint方法
public class TestGraphics extends Frame. {public static void main(String []args) {new TestGraphics("画图",100,100,200,200,Color.white);}public TestGraphics(String s,int x,int y,int w,int h,Color c) {super(s);this.setBounds(x, y, w, h);this.setBackground(c);this....

相似回答