- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开始一个小项目来创建一个简单的西洋跳棋游戏。然而,自从我使用 Java GUI 工具以来已经有很长时间了。此时代码的目标是绘制初始棋盘(红色棋子在顶部,黑色在底部)。然而,当我运行代码时,我得到的只是一个空白框。我也有点不确定我的圆形绘图代码是否会做我想做的事情(即在某些方 block 内创建实心红色或黑色圆圈) 这是代码。在此先感谢您的任何帮助/建议
编辑:我可能应该交替绘制蓝色和灰色方 block ,否则它可能只是一个巨大的蓝色 Blob ,但此时我会选择一个巨大的蓝色 Blob :p
import javax.swing.*;
import java.awt.*;
public class CheckersServer
{
public static class Board
{
private JFrame frame = new JFrame();
private JPanel backBoard = new JPanel();
Board()
{
frame.setSize(905,905);
backBoard.setSize(900,900);
frame.setTitle("Checkers");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
backBoard.setVisible(true);
boardSquare bs;
String type = null;
//Filling in Red Side
for (int i = 0; i <=1; i++)
{
for(int j = 0; j < 9; j++)
{
if(j % 2 == 0)
{
type = "Red";
}
else
{
type = "Blank";
}
bs = new boardSquare(100*j,100*i,type);
backBoard.add(bs);
}
}
//Filling in empty middle
type = "Blank";
for (int i = 2; i < 7; i++)
{
for(int j = 0; j < 9; j++)
{
bs = new boardSquare(100*j,100*i,type);
backBoard.add(bs);
}
}
//Filling in Black side
for (int i = 7; i < 9; i++)
{
for(int j = 0; j < 9; j++)
{
if(j % 2 != 0)
{
type = "Black";
}
else
{
type = "Blank";
}
bs = new boardSquare(100*j,100*i,type);
backBoard.add(bs);
}
}
backBoard.repaint();
frame.add(backBoard);
frame.repaint();
}
private class boardSquare extends JComponent
{
private int x; //x position of the rectangle measured from top left corner
private int y; //y position of the rectangle measured from top left corner
private boolean isBlack = false;
private boolean isRed = false;
public boardSquare(int p, int q, String type)
{
x = p;
y = q;
if (type.equals("Black"))
{
isBlack = true;
isRed = false;
}
else if (type.equals("Red"))
{
isRed = true;
isBlack = false;
}
else if (type.equals("Blank"))
{
isBlack = false;
isRed = false;
}
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
Rectangle box = new Rectangle(x,y,100,100);
g2.draw(box);
g2.setPaint(Color.BLUE);
g2.fill(box);
if(isBlack)
{
g2.fillOval(x, y,100 ,100 );
g2.setColor(Color.black);
g2.drawOval(x, y, 100, 100);
}
else if(isRed)
{
g2.fillOval(x, y,100 ,100 );
g2.setColor(Color.red);
g2.drawOval(x, y, 100, 100);
}
}
}
}
public static void main(String[] args)
{
Board game = new Board();
}
}
最佳答案
你有几个问题。
Java UI 是基于布局的,这意味着当您将组件添加到父组件时,父组件的布局决定了子组件的放置位置。您没有任何代码来设置布局,因此您的应用程序使用默认设置(FlowLayout 是默认设置,这可能适用于您的情况,只要您的 JFrame 和子项大小合适)。
更大的问题在您的 boardSquare 类中。默认情况下,JPanel 的尺寸为 10x10。你没有指定大小,所以你所有的方 block 都是 10x10。您需要告诉方 block 它们有多大。您可以在 boardSquare 构造函数中执行此操作:
setPreferredSize(new Dimension(100, 100));
最后,在您的绘图代码中,您在绘制正方形和圆形时对 x,y 进行了偏移。这是距组件左上角的偏移量。您的组件(设置大小后)将为 100x100 像素。但是,如果您的 x,y 大于这些值,您将绘制在组件边界之外。相反,这些值应设置为 0,0,因为这是您正在绘制的组件的左上角。
通过设置方 block 的首选大小并将 x,y 设置为 0,我能够在框架中绘制方 block ,尽管它并不漂亮。在正确布局之前,您需要先设置正确的布局。
关于java - 在 Java 中创建跳棋盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9576157/
我正在尝试使用 nx 在图中找到一些特定节点(比方说 l 节点)的 1 跳、2 跳,如果需要,k 跳邻居。 single_source_dijkstra_path_length. 每个步骤的时间复杂度
假设在下一段中我的光标位于第一句中的第一个are上(希望我可以突出显示它,但我不能这样...... )。按两次 ff 后,第一句话就会傻瓜,然后of 。再按下去我将一事无成。 Some people
给定一个无向图,一个起始顶点和一个结束顶点。求出从源到汇的步行次数(这样一个顶点可以被多次访问)正好涉及 h 跳。例如,如果图形是三角形,则具有 h 跳的此类路径的数量由第 h 个 Jakobstah
我正在制作 Winston Wolf 的交互式 map 。我有一张世界地图,每个大陆都可以点击并显示该大陆的国家。当我点击非洲大陆时,页面会跳转到非洲国家(如您所料)。我的问题是,我可以阻止它跳跃吗?
这是我的第一个问题,所以如果我问错了,我很抱歉。 在我的实验中,多个 android 设备使用 WiFi Direct 连接。为了利用无线 tx 的广播特性,所有设备都加入一个多播组来交换它们的信息。
我最近开发了一个 WCF Facade 服务。我是 WCF 的新手,无法理解安全实现部分。 服务如下: 一个 asp.net 公共(public)网站有一个 WCF 客户端,它访问: DMZ 中的 W
序言: 当问楼梯问题时,通常给定的允许步幅数组是 [1,2,3] 在 SO 上看到很多相同问题的例子,比如 n-steps-with-1-2-or-3-steps-taken-how-many-way
我是一名优秀的程序员,十分优秀!