Java 自定义重绘根本不起作用
我正在尝试创建一个X/O游戏,当用户单击所需位置时,我无法调用drawString()。 我能够显示网格,并在用户单击的位置协调鼠标,但我无法在网格上重新绘制“X”和“O”。 请帮忙,谢谢 下面是代码片段:Java 自定义重绘根本不起作用,java,swing,Java,Swing,我正在尝试创建一个X/O游戏,当用户单击所需位置时,我无法调用drawString()。 我能够显示网格,并在用户单击的位置协调鼠标,但我无法在网格上重新绘制“X”和“O”。 请帮忙,谢谢 下面是代码片段: public class Tic_Tac_Toe extends JPanel { int xpos,ypos; ArrayList xlist = new ArrayList(); ArrayList ylist = new ArrayList();
public class Tic_Tac_Toe extends JPanel
{
int xpos,ypos;
ArrayList xlist = new ArrayList();
ArrayList ylist = new ArrayList();
Point cursorPosition;
public static void main(String[] args)
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
int x=0,y=0;
boolean win,mark;
Board b=new Board();
Tic_Tac_Toe t=new Tic_Tac_Toe();
t.dispFrame();
while(!b.isGridFull())
{
b.printboard();
System.out.println("Enter the desired character position:");
try
{
x=Integer.parseInt(br.readLine());
y=Integer.parseInt(br.readLine());
}
catch(Exception e)
{
System.out.println("Exception is:");
}
mark=b.placeMark(x,y);
win=b.checkforwin();
if(b.flag==true)
{
System.out.println("Congratulations player with character "+b.CurrentPlayerMark+" has won");
break;
}
b.changePlayer();
}
if(b.flag==false)
System.out.println("The game has been drawn!!!");
}
public void dispFrame()
{
JFrame frame = new JFrame("My New Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(300, 300));
frame.setResizable(false);
JPanel panel=new JPanel()
{
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(30,100,270,100);
g.drawLine(30,200,270,200);
g.drawLine(100,35,100,250);
g.drawLine(200,35,200,250);
for(int i = 0; i < xlist.size(); i ++)
{
Object a1=xlist.get(i);
Object b1=ylist.get(i);
int k=(Integer)a1;
int j=(Integer)b1;
g.drawString("X",k,j);
}
}
@Override
public void update(Graphics g)
{
paint(g);
if(Board.CurrentPlayerMark=='x')
g.drawString("X",xpos,ypos);
else if(Board.CurrentPlayerMark=='o')
g.drawString("O",xpos,ypos);
}
};
panel.addMouseListener(new MouseListener()
{
public char c;
@Override
public void mouseClicked(MouseEvent e)
{
c=Board.CurrentPlayerMark;
System.out.println(":MOUSE_CLICK_EVENT:");
cursorPosition = MouseInfo.getPointerInfo().getLocation();
xpos=cursorPosition.x;
ypos=cursorPosition.y;
xlist.add(xpos);
ylist.add(ypos);
Graphics g = getGraphics();
update(g);
repaint(); //Want to repaint here after user clicks on desired position in X/O grid
//Does update method is useful to call or not???
System.out.println("xlist: " + xlist +"ylist: " + ylist);
System.out.println("X: " + xpos + " Y: " + ypos);
System.out.println("CurrentPlayerMark is:"+c);
Board.changePlayer();
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
公共类Tic_Tac_Toe扩展JPanel
{
int XPO,YPO;
ArrayList xlist=新的ArrayList();
ArrayList ylist=新的ArrayList();
点光标定位;
公共静态void main(字符串[]args)
{
InputStreamReader isr=新的InputStreamReader(System.in);
BufferedReader br=新的BufferedReader(isr);
int x=0,y=0;
布尔赢,马克;
板b=新板();
Tic_Tac_Toe t=新Tic_Tac_Toe();
t、 dispFrame();
而(!b.isGridFull())
{
b、 印制板();
System.out.println(“输入所需的字符位置:”);
尝试
{
x=Integer.parseInt(br.readLine());
y=Integer.parseInt(br.readLine());
}
捕获(例外e)
{
System.out.println(“异常为:”);
}
标记=b.位置标记(x,y);
win=b.checkforwin();
如果(b.flag==true)
{
System.out.println(“祝贺角色为“+b.CurrentPlayerMark+”的玩家获胜”);
打破
}
b、 changePlayer();
}
如果(b.flag==false)
System.out.println(“游戏已经画好了!!!”;
}
公共无效dispFrame()
{
JFrame frame=新JFrame(“我的新框架”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(新尺寸(300300));
frame.setresizeable(false);
JPanel面板=新的JPanel()
{
@凌驾
公共组件(图形g)
{
超级组件(g);
g、 抽绳(30100270100);
g、 抽绳(3020027200);
g、 抽绳(100,35100250);
g、 抽绳(200,35200250);
对于(int i=0;i
在代码中单击鼠标后,您将在何处重新绘制。而Board类中的内容编辑代码段后,Board类仅提供功能和基本X/O逻辑交叉发布:。