带有Java Swing的Tictoe
目前,我在用JavaSwing编程TictaToe游戏时遇到了一些问题。 -框架应由9个空白标签组成 -单击X或O会出现 -第一次点击空白标签时应显示X或O,但多次点击同一标签不会产生更多影响 -当最后一次单击是X时,下一次应该是O -不管你是从X还是O开始 我写了两门课:带有Java Swing的Tictoe,java,swing,jlabel,string-comparison,Java,Swing,Jlabel,String Comparison,目前,我在用JavaSwing编程TictaToe游戏时遇到了一些问题。 -框架应由9个空白标签组成 -单击X或O会出现 -第一次点击空白标签时应显示X或O,但多次点击同一标签不会产生更多影响 -当最后一次单击是X时,下一次应该是O -不管你是从X还是O开始 我写了两门课: import java.awt.EventQueue; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; p
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TicTacToe extends JFrame{
JPanel p = new JPanel();
SignLabel labels[]= new SignLabel[9];
public TicTacToe() {
super("TicTacToe");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
p.setLayout(new GridLayout(3, 3));
for(int i=0;i<9;i++) {
labels[i] = new SignLabel();
p.add(labels[i]);
}
add(p);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
TicTacToe t = new TicTacToe();
}
});
}
}
如果我想编译代码并启动java文件,会出现想要的窗口,但要么没有标签,要么鼠标事件不起作用。
我猜getText()等的全部内容都是错误的,上面的方法也没有达到我所想的效果。
我很高兴能得到一些帮助!
谢谢大家! 这是您的代码更正 SignLabel.java
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
public class SignLabel extends JLabel implements MouseListener {
static boolean value = false;
public SignLabel() {
this.addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
value = !value;
if(getText().length() == 0){
if(value){
setText("X");
}else{
setText("O");
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
public class TicTacToe extends JFrame{
JPanel p = new JPanel();
SignLabel labels[]= new SignLabel[9];
public TicTacToe() {
super("TicTacToe");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
p.setLayout(new GridLayout(3, 3));
for(int i=0;i<9;i++) {
labels[i] = new SignLabel();
labels[i].setBorder(BorderFactory.createLineBorder(Color.black));
p.add(labels[i]);
}
add(p);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
TicTacToe t = new TicTacToe();
}
});
}
}
TicTacToe.java
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
public class SignLabel extends JLabel implements MouseListener {
static boolean value = false;
public SignLabel() {
this.addMouseListener(this);
}
public void mouseClicked(MouseEvent e) {
value = !value;
if(getText().length() == 0){
if(value){
setText("X");
}else{
setText("O");
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
public class TicTacToe extends JFrame{
JPanel p = new JPanel();
SignLabel labels[]= new SignLabel[9];
public TicTacToe() {
super("TicTacToe");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
p.setLayout(new GridLayout(3, 3));
for(int i=0;i<9;i++) {
labels[i] = new SignLabel();
labels[i].setBorder(BorderFactory.createLineBorder(Color.black));
p.add(labels[i]);
}
add(p);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
TicTacToe t = new TicTacToe();
}
});
}
}
导入java.awt.EventQueue;
导入java.awt.GridLayout;
导入javax.swing.JFrame;
导入javax.swing.*;
导入java.awt.*;
公共类TicTacToe扩展JFrame{
JPanel p=新的JPanel();
SignLabel标签[]=新的SignLabel[9];
公共交通{
超级(“Tictatoe”);
setDefaultCloseOperation(关闭时退出);
设置大小(300300);
p、 setLayout(新的GridLayout(3,3));
对于(int i=0;这不是比较String
s的方式。应该使用getText().equals(“O”)
而不是=
。此外,getText()
返回空字符串(”
),而不是null
,当标签中没有任何内容时。还请注意,标签没有宽度,因为它们是空的。可能很难单击它们。将公共类SignLabel Extendes JLabel implements MouseListener
更改为公共类SignLabel Extendes JButton implements ActionListener。事实上,现在我想,它们应该只是标准按钮,游戏细节存储在TicTacToeModel
中。另外,据你所知,对于很多**监听器,Swing提供了一个等价的**适配器,你可以扩展它,通常使用匿名类。这样,你就可以实现你需要的,另一个我thods将被实现为空白方法。我非常感谢你的帮助!我在编程时仍然有一种非常复杂的思维方式,所以我总是让问题变得更加复杂。我不知道我可以使用边界作为边缘。这在玩游戏时确实更舒适。我也只是读了一些描述关于适配器的说明,更改了代码,现在确实少了一些行!谢谢!没问题!;)如果解决了问题,请接受答案,谢谢。