我将如何制作这款可调整大小的Chess GUI?
我们公司的任务是制作国际象棋游戏.它需要在Windows,OS X和Linux/Unix机器上工作,我们选择Java来实现这一点,同时保持一个通用的代码库(便于维护和降低成本).
我的任务是创建GUI.用户设计团队已经清除了以下规范.与客户.
国际象棋比赛(国际象棋冠军)将有力量调整大小和直接,它包括:
- 顶部的工具栏,带有UI组件:
- New 按键
- Save 按键
- Restore 按键
- Resign 按键
- 用于向玩家提供消息的标签.
在游戏的左侧,我们需要一个保留供将来使用的区域,它可能包括以下内容:
- 捕获的碎片列表
- 促销典当时选择件的选择器
- 游戏统计
- 提示等
客户和逻辑团队仍在解决这方面的细节.因此,暂时只需使用包含
?文本的标签进行标记即可.GUI的其余部分将由棋盘本身组成.它将有:
- 国际象棋棋盘的主要区域.如果用户指向棋子,它应该显示带边框的焦点.它也应该是键盘可访问的.客户将提供多个棋子(各种尺寸,样式和颜色)的精灵表,以允许用户改变游戏的外观.
- 棋盘将有标签指示列(从左到右:A,B,C,D,E,F,G和H)和行(从上到下:8,7,6,5,4,3,2) &1).
- 国际象棋棋盘和列/行标签将以1px黑色边框为边界,周围有8px填充.
- 随着玩家增加游戏的大小,棋盘应保持正方形,否则填充可用空间.
- 国际象棋棋盘后面的背景颜色应该是赭色,但在下面的模型中,我们将棋盘背后的区域设为绿色,以突出调整大小的行为.




我有两个图像,我想将这两个图像复制到一个新图像,其中第二个图像在第一个图像旁边,而不是在它的顶部.
BufferedImage imgb1 = img1;
BufferedImage imgb2 = img2;
BufferedImage imgResult = new BufferedImage(...);
Run Code Online (Sandbox Code Playgroud)
其中imgResult包含彼此相邻的第一个和第二个图像.
我有一个简单的棋盘在JPanel与GridLayout(8,8)作为布局管理器.
我正在尝试为字段的列名和行号添加面板.
现在我已经创建了另一个面板BorderLayout作为布局管理器,在这个面板中我添加了板BorderLayout.CENTER.旁边的板本身我添加了一个面板GridLayout(0,8)中BorderLayout.SOUTH和面板GridLayout(8,0)中BorderLayout.WEST.行数完全放在电路板旁边,因为左侧JPanel中的行数与电路板中的行数相匹配,但列名称(A,B,C,D,E,F,G,H)在由于JPanel的原因,板下的JPanel放置不正确BorderLayout.WEST.
如何制作带侧板的合适棋盘以显示场地编号/名称?
我已经尝试将南面板的布局设置为GridLayout(0,9)第一个字段为空,但左面板的宽度不等于电路板中的每个字段,因此这不是一个好的解决方法.
如何在Swing中的标签中"填充"Unicode字符?

我正在尝试为我最近编程的国际象棋程序制作一个用户界面(国际象棋棋子就像上面所见).在其中我使用unicode字符来表示我的棋子(\u2654通过\u265F).
问题如下:
当我将我的棋子背景设置为JLabel白色时,整个标签都被填满(在我的情况下,它是一个50*50px的白色正方形,顶部是角色).这导致我的作品看起来像瓷砖而不仅仅是他们的照片.
当我将标签设置为不透明时,我只得到我的棋子的饼干版本,而不是填充内部的那个.例如

有没有办法只填充角色?
如果不是,我想我会制作精灵表,但我喜欢这个,因为我可以使用国际象棋棋子toString()的标签方法.
import java.awt.*;
import javax.swing.*;
import java.util.Random;
class ChessBoard {
static Font font = new Font("Sans-Serif", Font.PLAIN, 50);
static Random rnd = new Random();
public static void addUnicodeCharToContainer(
String s, Container c, boolean randomColor) {
JLabel l = new JLabel(s);
l.setFont(font);
if (randomColor) {
int r = rnd.nextInt(255);
int g = rnd.nextInt(255);
int b = rnd.nextInt(255);
l.setForeground(new Color(r,g,b));
l.setBackground(new Color(255-r,255-g,255-b));
l.setOpaque(true);
}
c.add(l);
}
public …Run Code Online (Sandbox Code Playgroud) 动画(循环)GIF可以用JLabelHTML格式显示(在格式化的文本组件中JEditorPane),并且可以循环显示.
但是要加载图像作为容器的背景,我通常会使用ImageIO.read()或者Toolkit.getImage()(后者在我感觉上一个千年怀旧时).加载图像的方法都不会导致循环图像,它通常只是第一帧.
如何为背景加载动画图像?
我正在使用Java开发老虎机,到目前为止我创建了一个随机生成两张图片的按钮.我的代码编译但是当我运行它时,我在paint方法中放入的所有东西都没有显示出来.有什么我想念的吗?感谢您的帮助,这是我的一些代码.
public void paint(Graphics g) {
super.paintComponents(g);
g.drawString("Int 1 is" + int1,30,30);
g.drawString("Int 2 is" + int2,30,80);
switch (int1) {
case 0:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img, 300, 500, this);
break;
case 1:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img2,300,500,this);
break;
case 2:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img3,300,500,this);
break;
case 3:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img4,300,500,this);
break;
case 4:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img5,300,500,this);
break;
case 5:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img6,300,500,this);
break;
case 6:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img7,300,500,this);
break;
case 7:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img8,300,500,this);
break;
case 8:
g.setColor(Color.white);
g.fillRect(300,300,300,500);
g.drawImage(img9,300,500,this);
break;
case 9:
g.setColor(Color.white); …Run Code Online (Sandbox Code Playgroud) 使用Graphics2d,我试图BufferedImage在背景图像上绘制.在这张图片的任意一点,我想在绘制的图像中"切出一个圆孔"让背景显示出来.
我希望这个洞不是一个坚固的形状,而是一个渐变.换句话说,BufferedImage应该具有与其距孔中心的距离成比例的α/不透明度.
我对Graphics2d渐变有点熟悉AlphaComposite,但有没有办法将它们结合起来?
是否有(不是非常昂贵)的方式来实现这种效果?
我想为分组和未分组的节点显示单独的图标。我创建了一个自定义TreeCellRender。下面给出了我的示例代码。在for循环中,奇数一个节点有一个图标,偶数有另一个图标。但不更改节点的图标。在我的应用程序中,填充来自数据库的树节点并根据某些条件进行分组。这是一个示例可运行代码。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
public class TestTree extends JDialog {
JTree tree;
DefaultTreeModel treeModel;
public TestTree() {
setSize(300, 800);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
System.out.println(getContentPane().getBackground());
}
protected static ImageIcon createImageIcon(String path) throws MalformedURLException {
java.net.URL imgURL = new URL(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public void init() throws MalformedURLException …Run Code Online (Sandbox Code Playgroud) 有没有办法使用java.awt中的BasicStroke生成动画虚线?我的愿望是以与photoshop的矩形品牌工具的动画线相同的方式运行虚线.
我的项目包含一个名为images的图像文件夹.我想JLabel在按下按钮时随机显示图像.我试过下面的代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
Image im=new ImageIcon(this.getClass().getResource("/images/a1.jpg")).getImage();
ImageIcon iconLogo = new ImageIcon(im);
jLabel2.setIcon(iconLogo);
}
Run Code Online (Sandbox Code Playgroud)
此代码仅显示图像a1.但我需要随机拍摄图像(一次一张图像).
java ×10
swing ×7
image ×4
background ×2
alpha ×1
animated-gif ×1
animation ×1
awt ×1
character ×1
chess ×1
gradient ×1
graphics ×1
graphics2d ×1
grid-layout ×1
jbutton ×1
jframe ×1
jtree ×1
netbeans-7 ×1
paint ×1
random ×1
unicode ×1