看了马士兵老师的坦克大战java程序,想按照自己的思路动手编一下,结果界面背景设置不了,

图也画不出来,大神们帮忙看看哈,顺便问一句,java作图非要继承Frame或JFrame嘛?第一个!importjava.awt.Color;importjava.awt... 图也画不出来,大神们帮忙看看哈,顺便问一句,java作图非要继承Frame或JFrame嘛?
第一个!
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Kosese001 extends JFrame
{
private JFrame jfrmMain;
int x = 30, y = 50;

private Kosese001()
{
mainFrame();
}

private void mainFrame()
{
jfrmMain = new JFrame("坦克大战");
jfrmMain.setLocation(100, 100);
jfrmMain.setSize(800, 600);
jfrmMain.setVisible(true);
jfrmMain.setBackground(Color.green);
jfrmMain.setResizable(false);
}
public static void main(String[] args)
{
Kosese001 kosese = new Kosese001();
}

public void paint(Graphics g)
{
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 35, 35);
g.setColor(c);
x += 5;
}
}
第二个!
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Kosese001 extends JFrame
{
int x = 30, y = 50;
private JFrame jfrmMain;
private MyPaint mypaint;

private Kosese001()
{
mainFrame();
}

private void mainFrame()
{
jfrmMain = new JFrame("坦克大战");
jfrmMain.setLocation(100, 100);
jfrmMain.setSize(800, 600);
jfrmMain.setVisible(true);
jfrmMain.getContentPane().setBackground(Color.green);
jfrmMain.setResizable(false);
mypaint = new MyPaint();
jfrmMain.getContentPane().add(mypaint);
}

private class MyPaint extends JPanel
{
public void paintComponents(Graphics g)
{
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 35, 35);
g.setColor(c);
x += 5;
}
}
*/
public static void main(String[] args)
{
Kosese001 kosese = new Kosese001();
}
}
展开
 我来答
截竹为萧
2013-08-24 · TA获得超过155个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:197万
展开全部
java 作图 不一定要继承JFrame或者Frame,但是所有的组件必须放到顶层容器,Java Swing 有三种顶层容器

JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。
·JDialog:和JFrame类似,只不过JDialog是用来设计对话框。
·JApplet:用来设计可以在嵌入在网页中的Java小程序。

而且你的代码 Kosese001既然继承了JFrame 那么他的构造就是个JFrame ,你下面又new JFrame("坦克大战");这样何必继承,直接在构造里面实现操作就可以把Kosese001中,

你的背景色没有显示出来,是由于JFrame 是顶层容器,它默认的布局会设置它的背景色,除非你在前面 加上 jfrmMain.setLayout(null);使得布局变成空布局,下面的jfrmMain.getContentPane().setBackground(Color.green); 才会生效,或者你可以通过设置JFrame上组件的背景色来完成同样的效果 比如 mypaint = new MyPaint();
mypaint.setBackground(Color.green); 还有啥不懂的 可以问我。
更多追问追答
追问
你的意思是继承之后直接由this.?能把你的QQ给我吗,QQ上说方便点!
追答
我帮你把代码简化一下给你吧。
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Kosese001 extends JFrame{

int x = 30, y = 50;
private Kosese001() {
super("坦克大战");
JPanel mypaint = new MyPaint();
mypaint.setBackground(Color.green);
add(mypaint);
setLocation(100, 100);
setSize(800, 600);
setVisible(true);
setResizable(false);
//这句关闭资源的加上 不然你的JVM内存会被消耗完
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class MyPaint extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(x, y, 35, 35);
x += 5;
}
}
public static void main(String[] args) {
Kosese001 kosese = new Kosese001();
}
}
你的图没画出来 是你重写方法写错了paintComponents多了个 s。。。。。。
扣扣 1254158885 添加的时候 说明来意。。。。不然或许会被拒绝。。。
飞天0407
2013-08-24 · 超过33用户采纳过TA的回答
知道答主
回答量:230
采纳率:0%
帮助的人:83.1万
展开全部
把jfrmMain.setVisible(true);放在最后,先把背景什么的设置完再调用这个方法试试
追问
还是不行!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式