比如,我画了个棋盘,我需要通过鼠标点击来下棋,肯定是全部要显示出来的,但我按一般方法,并没达到我的预期效果。y该怎么做???初学。下面是我的代码:
//Chessboard
package gobang;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;public class Chessboard extends JFrame{
public Chessboard() {
add(new Board(), BorderLayout.CENTER);//怎么没居中啊?????????
add(new PressToCircle());
//应该不这样做的吧,加这个之后,棋盘就没了棋子也只显示点击的那个
setBackground(Color.red);//怎么没显示颜色???????????
}
public static void main(String[] args) {
Chessboard frame = new Chessboard();
frame.setTitle("Chessboard");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
frame.setVisible(true);
}
}class Board extends JPanel{
private int width=600, height=600;//
private int d = width / 20; public Board (){
//setBackgroud(new Color(235, 157, 80));
}
public void paint(Graphics g) {//画棋盘 Component
super.paintComponent(g);
for(int i = 0; i<=width; i+= d){
if(i==0 || i==width){
g.drawLine(i, 0, i, height);
g.drawLine(0, i, width, i);
}else{
g.drawLine(i, d, i, height-d);
g.drawLine(d, i, width-d, i);
}
}
}
}
//Chessman
package gobang;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;public class Chessman extends JFrame{
public Chessman() {
this.add(new PressToCircle ());
}
}class PressToCircle extends JPanel {
private int x, y; //位置
final int ChessSize = 30;//棋子大小
public void paintComponent(Graphics g) {//画棋子
super.paintComponent(g);
g.drawOval(x-ChessSize/2, y-ChessSize/2, ChessSize, ChessSize);
}
public PressToCircle () {
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
});
}
}
//Chessboard
package gobang;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;public class Chessboard extends JFrame{
public Chessboard() {
add(new Board(), BorderLayout.CENTER);//怎么没居中啊?????????
add(new PressToCircle());
//应该不这样做的吧,加这个之后,棋盘就没了棋子也只显示点击的那个
setBackground(Color.red);//怎么没显示颜色???????????
}
public static void main(String[] args) {
Chessboard frame = new Chessboard();
frame.setTitle("Chessboard");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
frame.setVisible(true);
}
}class Board extends JPanel{
private int width=600, height=600;//
private int d = width / 20; public Board (){
//setBackgroud(new Color(235, 157, 80));
}
public void paint(Graphics g) {//画棋盘 Component
super.paintComponent(g);
for(int i = 0; i<=width; i+= d){
if(i==0 || i==width){
g.drawLine(i, 0, i, height);
g.drawLine(0, i, width, i);
}else{
g.drawLine(i, d, i, height-d);
g.drawLine(d, i, width-d, i);
}
}
}
}
//Chessman
package gobang;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;public class Chessman extends JFrame{
public Chessman() {
this.add(new PressToCircle ());
}
}class PressToCircle extends JPanel {
private int x, y; //位置
final int ChessSize = 30;//棋子大小
public void paintComponent(Graphics g) {//画棋子
super.paintComponent(g);
g.drawOval(x-ChessSize/2, y-ChessSize/2, ChessSize, ChessSize);
}
public PressToCircle () {
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
});
}
}
add(new PressToCircle());PressToCircle我没具体的去看
因为你先添加了Board 再添加的时候会将之前的面扳给覆盖因为JFrame 的布局默认的为BorderLayout
要么你就只添加一个
你换个添加的顺序,再看运行效果,棋盘出来了吧
如果换下添加顺序,就只有棋盘,不能点击生成棋子。
你是不是没理解我的意思啊,反正就是实现下棋的过程。
背景色要显示的话在Board上设置,否则会被Board覆盖
class drawPanel extends JPanel {// @Override
// public void update(Graphics g) {
// paint(g);
// }
final int NUM=19;
@Override
@SuppressWarnings("static-access")
public void paint(Graphics g) {
//System.out.println("开始重绘");
g.setColor(Color.black);
char a_s = 'a';//棋盘从上到下的标记
int oneToNt=1;
String Str= new String();//将标记转化为字符串
for (int i = 0; i < 19; ++i) {
g.drawString(Str.valueOf((char)(a_s+i)),16,34+20*i);//为了对应交点,标记位置进行了调整
g.drawLine(30, 30 + 20 * i, 390, 30 + 20 * i);
}
for (int i = 0; i < 19; ++i) {
if(i<9){
g.drawString(Str.valueOf(oneToNt+i),27+20*i,24);
}else{
g.drawString(Str.valueOf(oneToNt+i),24+20*i,24);
}
g.drawLine(30 + 20 * i, 30, 30 + 20 * i, 390);
}
}
}这是我的代码 给你用吧