我现在正在做连接4游戏,我正在绘制令牌,我需要通过单击右键或左按钮之类的事件来翻译它...这是我的代码
public static Graphics myInstance;
public Executer(){
setTitle("Connect 4");
setSize(500,700);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
myInstance = this.getGraphics();
}
public void paint (Graphics g){
//Drawing the grid
Color black = new Color(0, 0, 0);
g.setColor(black);
//g.drawString("Hi", 50, 50);
g.drawRect(20, 200, 441, 400);
for (int i=0;i<7;i++)
g.drawLine(83 + i*63, 200, 83 + i*63, 600);
for (int i=0;i<5;i++)
g.drawLine(20 ,267 + i*67, 461 , 267 + i*67);
//End Drawing the grid
}
public static void main (String[] args){
Executer e = new Executer();
//Drawing Red Tokken
Color red = new Color(255, 0, 0);
myInstance.setColor(red);
myInstance.fillOval(29, 150, 50, 50);
}
我不知道用哪一个函数翻译,我已经搜索了,但什么也没有找到,或者我应该从一开始就清除绘图并重新绘制?!
建议:
getGraphics()
来获取Graphics对象。首先,几乎可以保证您的代码会给您一个空引用,从而有导致NullPointerException的风险。但另一方面,即使您成功了,这样获得的Graphics对象也会很短,并且在程序运行时可能会变得不起作用或为空diskColor
的字段,然后将在paintComponent中使用该字段。这将允许外部类更改paintComponent中绘制的颜色例如,使用图像图标:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
@SuppressWarnings("serial")
public class ConnectGrid extends JPanel {
public static final int ROWS = 7;
public static final int COLS = 6;
public static final int DIAMETER = 80;
// color of blank icon, placeholder for grid position without disk
private static final Color BLANK_COLOR = new Color(0, 0, 0, 0);
// all colors -- placeholder, red and yellow
public static final Color[] COLORS = { BLANK_COLOR, Color.RED, Color.YELLOW };
// ImageIcons mapped to color
private static final Map<Color, Icon> iconMap = new HashMap<>();
private static final int GAP = 2;
// JLabel grid that holds the colored icons
private JLabel[][] labelGrid = new JLabel[ROWS][COLS];
private Color turn = Color.RED; // whose turn is it?
static {
// create our colored image icons
int w = DIAMETER;
int h = DIAMETER;
int imgType = BufferedImage.TYPE_INT_ARGB;
for (Color color : COLORS) {
BufferedImage img = new BufferedImage(w, h, imgType);
Graphics2D g2 = img.createGraphics();
// smooth drawing
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// draw the color
g2.setColor(color);
g2.fillOval(GAP, GAP, w - 2 * GAP, h - 2 * GAP);
// draw a black border
g2.setStroke(new BasicStroke(3f));
g2.setColor(Color.black);
g2.drawOval(GAP, GAP, w - 2 * GAP, h - 2 * GAP);
g2.dispose();
// create ImageIcon and put in iconMap, mapped to color
iconMap.put(color, new ImageIcon(img));
}
}
public ConnectGrid() {
// JPanel to hold grid of JLabels
JPanel gridPanel = new JPanel(new GridLayout(ROWS, COLS, GAP, GAP));
// create grid of JLabels, add to gridPanel JPanel
// fill labels with blank icon, add MouseListener
for (int row = 0; row < labelGrid.length; row++) {
for (int col = 0; col < labelGrid[row].length; col++) {
// must swap the row numbers since 0th row is on the bottom
labelGrid[ROWS - row - 1][col] = new JLabel(
iconMap.get(BLANK_COLOR));
gridPanel.add(labelGrid[ROWS - row - 1][col]);
labelGrid[ROWS - row - 1][col].addMouseListener(new MyMouse(
ROWS - row - 1, col));
}
}
JPanel buttonPanel = new JPanel();
buttonPanel.add(new JButton(new ResetAction("Reset")));
setLayout(new BorderLayout());
add(gridPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.PAGE_END);
}
private class MyMouse extends MouseAdapter {
private int row;
private int col;
public MyMouse(int row, int col) {
this.row = row;
this.col = col;
}
@Override
public void mousePressed(MouseEvent e) {
JLabel label = (JLabel) e.getSource();
Icon icon = label.getIcon();
if (icon != iconMap.get(BLANK_COLOR)) {
// if label already has a colored icon, ignore mouse press
return;
}
// if not at bottom row
if (row != 0
// and label below has a blank icon
&& labelGrid[row - 1][col].getIcon() == iconMap
.get(BLANK_COLOR)) {
// ignore mouse press
return;
}
// get color for this turn
icon = iconMap.get(turn);
// set label's icon
label.setIcon(icon);
// toggle the value of turn
// TODO: check for win here
turn = (turn == COLORS[1]) ? COLORS[2] : COLORS[1];
}
}
private class ResetAction extends AbstractAction {
public ResetAction(String name) {
super(name);
}
@Override
public void actionPerformed(ActionEvent e) {
for (JLabel[] labelRow : labelGrid) {
for (JLabel label : labelRow) {
label.setIcon(iconMap.get(BLANK_COLOR));
}
}
}
}
private static void createAndShowGui() {
ConnectGrid mainPanel = new ConnectGrid();
JFrame frame = new JFrame("ConnectGrid");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
本文向大家介绍把对象转换到数字类型是如何转换的?相关面试题,主要包含被问及把对象转换到数字类型是如何转换的?时的应答技巧和注意事项,需要的朋友参考一下 1、如果对象有valueOf方法,则调用该方法,并返回相应的结果; 2、当调用valueOf返回的依然不是数字,则会调用对象的toString方法,并返回相应的结果; 3、否则抛出异常。
问题内容: 我试图理解Java的多态性,但是我有一个关于向下转换对象的问题。假设在此示例中,我有两个子类Dog和Cat,它们从超类Animal继承 据我了解,向下转换对象的唯一方法是,如果该对象已经是好类型,如下所示: 这样行吗? 但是,如果我想创建一个普通的动物而又不知道它会是什么,然后在知道时将其投放,该怎么办? 这会在运行时抛出ClassCastException吗? 我发现这样做的唯一方法
问题内容: 如何将java对象转换为InputStream? 问题答案: 您可以使用ObjectOutputStream 您将对象(以下代码中的obj)写入ObjectOutputStream,要转换为输入流的对象必须实现Serializable。
问题内容: 如何在Java中将对象转换为int? 问题答案: 如果您确定该对象是: 或者,从Java 7开始,您可以等效地编写: 当心,它可以抛出一个,如果你的对象是不是和你要的对象是。 这样,您就假定对象是一个整数(包装的int),然后将其拆箱为一个int。 是基元,因此不能将其存储为,唯一的方法是将考虑/装箱为,然后存储为。 如果您的对象是,则可以使用方法将其转换为简单的int: 如果您的对象
我试图将一个可绘制资源转换为位图,但每个代码段和每个自己的尝试都返回null或空字符串。 我尝试了一些基本的方法,比如Bitmapfactory。decodeResource(在这里,我尝试了活动上下文、应用程序上下文等,以及各种可绘制资源(png、vector、xml),我尝试了转换中的不同代码段,它总是返回null或“”。我还尝试更改可绘制文件夹而不是可绘制文件夹-24我尝试了基本的可绘制文件
本文向大家介绍把对象转换到字符串类型是如何转换的?相关面试题,主要包含被问及把对象转换到字符串类型是如何转换的?时的应答技巧和注意事项,需要的朋友参考一下 #2928 (comment) 首先会查找对象是否实现了方法。 一般来说方法决定了和的调用顺序,该方法接受一个参数 ,当 为时,则调用方法;为时,则调用方法。 例: