package chengxu;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import java.io.PrintStream;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class shi extends Frame
{
// Frame f=new Frame("TestMenuBar");
Image oimg=null;
Graphics og=null;
MenuBar menubar=new MenuBar(); //创建菜单条对象
Menu fileM=new Menu("游戏"); //创建各菜单
Menu editM=new Menu("视图"); //创建各菜单
Menu toolsM=new Menu("网络对弈"); //创建各菜单
Menu helpM=new Menu("帮助"); //创建各菜单
MenuItem fileMI1=new MenuItem("New"); //创建各菜单项
MenuItem fileMI2=new MenuItem("Open"); //创建各菜单项
MenuItem fileMI3=new MenuItem("Save"); //创建各菜单项
CheckboxMenuItem fileMI5=new CheckboxMenuItem("Quit",true);
//创建各菜单项
Menu filePrint = new Menu("print");//创建子菜单
MenuItem printM1 = new MenuItem("preview");
MenuItem printM2 = new MenuItem("setting");
shi()
{
FlowLayout fl=new FlowLayout();
setLayout(fl);
menubar.add(fileM); //将菜单加入菜单条
menubar.add(editM);
menubar.add(toolsM);
menubar.add(helpM);
fileM.add(fileMI1); //将菜单项加入file菜单中
fileM.add(fileMI2);
fileM.add(fileMI3);
filePrint.add(printM1);//将菜单项加入print菜单中
filePrint.add(printM2);
fileM.add(filePrint);
//将print菜单作为一个菜单项加入file菜单中
fileM.addSeparator(); //将一条分割线加入菜单中
fileM.add(fileMI5); //将菜单项加入菜单中
setMenuBar(menubar); //把整个菜单系统显示在窗口中
setBounds(0,0,630,630);
setVisible(true);
Dimension d=getSize();
oimg=createImage(d.width,d.height);
og=oimg.getGraphics();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Graphics g = getGraphics();
for(int j=0;j<15;j++) //画出棋盘
for(int i=0;i<15;i++)
{
int x = 30*i+90;
int y = 30*j+90;
g.setColor(Color.red);
g.drawRect(x,y,30,30);
og.setColor(Color.red);
og.drawRect(x,y,30,30);
}
addMouseListener(new MouseAdapter() //鼠标点击事件
{
int xx;
int x;
int y;
public void mousePressed(MouseEvent e)
{
if(e.getX()<555&&e.getX()>75&&e.getY()<555&&e.getY()>75)
{
x=((e.getX()-15)/30+1)*30; //计算坐标
y=((e.getY()-15)/30+1)*30;
Graphics g = getGraphics();
g.setColor(Color.red);
g.fillOval(x-8,y-8,16,16); //画出棋子
}
}
});
}
public void paint(Graphics g) //重绘图象
{
if(oimg !=null)
getGraphics().drawImage(oimg,0,0,this);
}
public static void main(String[] args)
{
new shi();
}
}
图形无法重绘
每次图形最小化 就只见棋盘不见旗子
可能是无法重绘 望解答!!!
5 个解决方案
#1
会不会和画得先后次序有关.
#2
要重载一下最小化,恢复函数,将重画功能加入进去.
#3
你的public void paint(Graphics g) 方法里只画了getGraphics().drawImage(oimg,0,0,this);----棋盘.
所以,你只看到棋盘,不能看到棋子.
所以,你只看到棋盘,不能看到棋子.
#4
定义一个数组(或容器),记录每个棋子的颜色与x,y坐标,paint事件里对之进行循环,用fillOval重画每一个棋子
#5
wangaiguo(英雄爱过美人关)
说的是正确的,你应该将画棋盘和棋子的动作都写在paint函数里,如果发生落子等变化,调用repaint函数就可以了
说的是正确的,你应该将画棋盘和棋子的动作都写在paint函数里,如果发生落子等变化,调用repaint函数就可以了
#1
会不会和画得先后次序有关.
#2
要重载一下最小化,恢复函数,将重画功能加入进去.
#3
你的public void paint(Graphics g) 方法里只画了getGraphics().drawImage(oimg,0,0,this);----棋盘.
所以,你只看到棋盘,不能看到棋子.
所以,你只看到棋盘,不能看到棋子.
#4
定义一个数组(或容器),记录每个棋子的颜色与x,y坐标,paint事件里对之进行循环,用fillOval重画每一个棋子
#5
wangaiguo(英雄爱过美人关)
说的是正确的,你应该将画棋盘和棋子的动作都写在paint函数里,如果发生落子等变化,调用repaint函数就可以了
说的是正确的,你应该将画棋盘和棋子的动作都写在paint函数里,如果发生落子等变化,调用repaint函数就可以了