【问题标题】:Java chess tableJava国际象棋表
【发布时间】:2014-03-02 00:05:41
【问题描述】:

对于用爱沙尼亚语而不是英语编写此代码,我要提前道歉。 我是 Java 初学者(到目前为止有 2-3 小时的经验)。我正在尝试为可定制的国际象棋表编写代码。(尺寸可定制)到目前为止,我已经能够为表编写代码,但我在着色时遇到了问题。如何根据棋盘的正确颜色为棋盘上色? 包装esimene;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Joonistame4 extends JComponent implements ActionListener{

int suurus = 10;
int korgus = 10;
int x = 50;
int y = 50;
JTextField tf = new JTextField(String.valueOf(suurus));
JTextField tf2 = new JTextField(String.valueOf(korgus));
JColorChooser varvivalik = new JColorChooser();
JPanel p = new JPanel(new GridLayout(3,2)); //rida , veerg
JCheckBox cb = new JCheckBox();


public Joonistame4(){
    setLayout(new BorderLayout());
    p.add(new Label("suurus: "));
    p.add(tf);

    add(p, BorderLayout.SOUTH);
    //add(varvivalik, BorderLayout.EAST);
    tf.addActionListener(this);
    cb.addActionListener(this);
    varvivalik.setPreviewPanel(new JPanel());
}

public void paintComponent(Graphics g){

    int suurus_kokku = 8*suurus;
    g.setColor(Color.BLUE);
    for(int x = suurus; x < suurus_kokku; x = x+suurus) {

        for(int y = suurus; y < suurus_kokku; y = y+suurus) {
            if(cb.isSelected()){
                g.fillRect(50, 50, suurus, suurus);
            }else{
                g.drawRect(50+y, 50+x, suurus, suurus);
                }       
            }

    }
}   



public static void main(String[] args) {
    JFrame aken = new JFrame("Esimene aken");
    aken.setSize(600, 600);
    aken.getContentPane().add(new Joonistame4());
    aken.setVisible(true);
    aken.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void actionPerformed(ActionEvent arg0) {
    suurus = Integer.parseInt(tf.getText());
    repaint();

}

}

【问题讨论】:

  • 请只发布相关部分。
  • 请用英文命名变量
  • 您可以多次使用setColor

标签: java swing colors paintcomponent jcomponent


【解决方案1】:

如果问题实际上是确定绘制单元格的颜色,最简单的方法是查看加在一起的两个数字是奇数还是偶数,然后相应地绘制单元格。

即每个单元格

boolean blackSquare = (x+y)%2==0;

如果设置了blackSquare,则为单元格绘制一种颜色,否则为另一种颜色。

要实际设置颜色,只需在绘制正方形之前进行适当的调用。

【讨论】:

  • 谢谢,这正是我想要的。我在python中使用过这个,但不知道如何在java中使用它。
【解决方案2】:

首先让我告诉你,这是用 Java 创建棋盘的一种有点奇怪的方法。但这也取决于你的目标 - 我想出于教育原因你应该继续 :)

要使用Java Graphics 绘制不同的颜色,您必须在每个g.fillRect(...)g.drawRect(...) 或任何其他绘画函数前面使用g.setColor(SOME_COLOR);。这些函数始终使用“当前设置”的颜色进行绘制。

【讨论】:

  • 是的,这是出于教育目的。谢谢,这部分回答了我的问题。唯一的问题是我如何在棋盘中的白色和黑色之间交换?
  • @ArmidoMaamägi 如果他回答了你的问题,那么请这样做并接受他的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2013-05-24
相关资源
最近更新 更多