相关疑难解决方法(0)

制作一个强大,可调整大小的Swing Chess GUI

我将如何制作这款可调整大小的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填充.
  • 随着玩家增加游戏的大小,棋盘应保持正方形,否则填充可用空间.
  • 国际象棋棋盘后面的背景颜色应该是赭色,但在下面的模型中,我们将棋盘背后的区域设为绿色,以突出调整大小的行为.

在游戏开始之前,最小尺寸的国际象棋冠军

在游戏开始之前,ChessChamp以最小尺寸

激活新游戏按钮后,最小尺寸的国际象棋冠军

激活新游戏按钮后,最小尺寸的国际象棋冠军

国际象棋冠军比最小尺寸更宽

ChessChamp比最小尺寸拉伸得更宽

国际象棋冠军比最小尺寸高

国际象棋冠军比最小尺寸高

java user-interface swing layout-manager

25
推荐指数
2
解决办法
3万
查看次数

将两个BufferedImages并排复制到一个图像中

我有两个图像,我想将这两个图像复制到一个新图像,其中第二个图像在第一个图像旁边,而不是在它的顶部.

BufferedImage imgb1 = img1;
BufferedImage imgb2 = img2;
BufferedImage imgResult = new BufferedImage(...);
Run Code Online (Sandbox Code Playgroud)

其中imgResult包含彼此相邻的第一个和第二个图像.

java bufferedimage image image-processing

12
推荐指数
1
解决办法
2万
查看次数

使用JPanel创建一个Chess板

我有一个简单的棋盘在JPanelGridLayout(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)第一个字段为空,但左面板的宽度不等于电路板中的每个字段,因此这不是一个好的解决方法.

java swing chess layout-manager grid-layout

12
推荐指数
1
解决办法
7万
查看次数

'填充'标签中的Unicode字符

如何在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)

java unicode swing background character

11
推荐指数
1
解决办法
6829
查看次数

在Swing中显示动画BG

动画(循环)GIF可以用JLabelHTML格式显示(在格式化的文本组件中JEditorPane),并且可以循环显示.

但是要加载图像作为容器的背景,我通常会使用ImageIO.read()或者Toolkit.getImage()(后者在我感觉上一个千年怀旧时).加载图像的方法都不会导致循环图像,它通常只是第一帧.

如何为背景加载动画图像?

java swing background image animated-gif

9
推荐指数
2
解决办法
1万
查看次数

如何在JPanel中使用paint方法

我正在使用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)

java swing paint jframe jbutton

6
推荐指数
1
解决办法
1548
查看次数

Java Graphics2D - 使用渐变不透明度绘制图像

使用Graphics2d,我试图BufferedImage在背景图像上绘制.在这张图片的任意一点,我想在绘制的图像中"切出一个圆孔"让背景显示出来.

我希望这个洞不是一个坚固的形状,而是一个渐变.换句话说,BufferedImage应该具有与其距孔中心的距离成比例的α/不透明度.

我对Graphics2d渐变有点熟悉AlphaComposite,但有没有办法将它们结合起来?

是否有(不是非常昂贵)的方式来实现这种效果?

java gradient alpha image graphics2d

5
推荐指数
1
解决办法
2042
查看次数

如何动态设置Jtree节点图标

我想为分组和未分组的节点显示单独的图标。我创建了一个自定义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 swing jtree treecellrenderer

4
推荐指数
1
解决办法
4164
查看次数

使用java.awt.BasicStroke动画化虚线

有没有办法使用java.awt中的BasicStroke生成动画虚线?我的愿望是以与photoshop的矩形品牌工具的动画线相同的方式运行虚线.

java graphics animation awt

3
推荐指数
1
解决办法
4267
查看次数

在Netbeans中显示从文件夹到JLabel的随机图像

我的项目包含一个名为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 random swing image netbeans-7

3
推荐指数
1
解决办法
7237
查看次数