首先,我看了这里所有其他类似的帖子,但没有一个能帮上忙。我正在写一个扫雷游戏,我试图在JFrame的边界布局顶部放置一个Jlabel,并让它显示一个计数器,指示还有多少地雷需要标记。每当单击网格上的任何其他JLabel时,都需要重新绘制它。首先,对于我的html" target="_blank">代码,我的标题JLabel上从来没有显示任何文本。让文本显示的唯一方法是将其放入我的JLabel构造函数中。这让我觉得我的paintComponent从未被调用过。我还为我的游戏的实际网格调用了鼠标手柄内部的headerJabel重绘方法。这样,如果用户单击游戏中的任何组件,标题JLabel将重新绘制自身以反映用户的移动。
导入javax。摆动导入java。awt。;
公共类JLabel计数器扩展JLabel{
private MinesweeperModel model;
public JLabelCounter(MinesweeperModel myModel)
{
model = myModel;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int minesRemaining = model.numberOfMinesRemaining();
setText("Mines remaining" + minesRemaining);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MinesweeperPanel extends JPanel {
private MinesweeperModel model;
private JLabelCounter labelCounter;
public MinesweeperPanel(MinesweeperModel myModel, JLabelCounter counter)
{
model = myModel;
labelCounter = counter;
setLayout(new GridLayout(10,10));
//addMouseListener(new MouseHandler());
for(int i = 0; i <10; i++)
{
for(int j = 0; j < 10; j++)
{
MinesweeperJLabel myJLabel = new MinesweeperJLabel(i,j,myModel);
myJLabel.addMouseListener(new MouseHandler());
add(myJLabel);
}
}
}
private class MouseHandler extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
MinesweeperJLabel labelClicked = (MinesweeperJLabel)e.getSource();
int x = labelClicked.getXCoordinate();
int y = labelClicked.getYCoordinate();
int buttonClicked = e.getButton();
if (buttonClicked == 1)
{
model.stepOnMine(x,y);
}
else if(buttonClicked == 3)
{
model.flagMine(x, y);
}
repaint();
labelCounter.repaint();
}
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
public class MinesweeperFrame extends JFrame{
public MinesweeperFrame()
{
MinesweeperModel myModel = new MinesweeperModel();
setTitle("My Super Awesome Minesweeper Game!");
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
setSize(screenSize.width/2,screenSize.height/2);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabelCounter counter = new JLabelCounter(myModel);
Container contentPane = getContentPane();
MinesweeperPanel panel = new MinesweeperPanel(myModel,counter);
contentPane.add(counter,BorderLayout.PAGE_START);
contentPane.add(panel);
setVisible(true);
}
}
使用原样的代码,看起来我甚至在运行时头部都没有JLabel。
不要调用setText从内的画组件,它会导致一个无效的组件和另一个重新绘制请求,一次又一次和...你明白我的意思
而不是尝试在绘制方法中更新标签。为您的模型添加某种侦听器接口,您可以使用它来更新标签。
基本上,当你的模型改变时,它会触发一个事件,你的标签可以对它做出反应并自我更新
问题内容: 我的servlet中有以下代码 这段代码只是返回图像的第一帧。 如何获得完整的GIF图片? 问题答案: 您的GIF无法动画,因为您只向客户端发送第一帧。:-) 实际上,您是这样,因为仅读取第一帧(并且a 只能包含单个帧/图像)。然后,您将该单个帧写入servlet输出流,并且结果将不进行动画处理(应该可以使用来创建动画GIF ,但是这样做的代码将非常冗长,请参阅如何在Java中对动画G
问题内容: 我有一个发出异步请求的函数。我如何从中返回响应/结果? 我尝试从回调中返回值,以及将结果分配给函数内部的局部变量并返回该局部变量,但这些方法均未真正返回响应(它们都返回或变量的初始值为任意值) 。 使用jQuery函数的示例: 使用node.js的示例: 使用承诺块的示例: 问题答案: →有关使用不同示例的异步行为的更一般说明,请参见 在函数内部修改变量后 , 为什么变量未更改?-异步
我启动了一个国际象棋项目,使用一些旧代码绘制地图,基本上所有内容都是复制粘贴的。问题是方块没有出现?我试着修了一会儿,但没有找到解决办法。下面可能是三种最重要的方法,并简要介绍了整个项目。有些是德语的。 https://drive.google.com/file/d/1nnZHLB0Ycy04eMyYbEmduMwbGhVLZ2VB/view?usp=sharing
我有一个C++实验室,问题是:用户应该为X输入一个值(X是所持有的测试数)。如果x<15,程序不计算任何东西。如果X在16和30之间,程序应计算C=1.0/10.0*(24a);如果X>30,程序应计算C=0.15(24*a)。我的multiple if代码可以工作,但是当我输入X的值时,方程没有解出。有人知道吗??
因此,我的问题是:为什么还没有被否决?如果核心Java团队已经决定它是坏的,那么他们一定也考虑过弃用。他们反对这样做的理由是什么(在Java8中,它仍然没有被反对)?
今天我开始玩分支,检查两个布尔值。我很确定,在某些优化级别上,它们将简单地添加并检查,但gcc和CLANG不是这样。为什么gcc不优化两个bool检查,用addition和一个check替换它们?让我给你看一个例子: 两个分支(test+je)不应该比加法和分支(add+jne)慢吗? 编辑:我真正的意思是乘法,因为在true和false的情况下(1+0),加法给出true(1),但乘法给出正确的