我正在制作一个简单的扫雷游戏(顶部没有菜单和其他东西)所有我需要的是一个9x9板,当每个瓷砖被点击时,如果没有炸弹附近,它要么是空白的,要么说有多少炸弹在它附近,或者说B代表炸弹。
我已经正确地完成了以上所有的工作,并且工作得非常完美。我的问题是,我需要在玩游戏时加入一个从0开始并从0开始连续计数的计时器,直到我点击炸弹停止为止。然后,我会在我的黑板下面有一个地方,用户可以输入他们的名字,下面有一个名为submit的按钮,它会显示出这个人的名字和时间。(请注意,玩家可以随时执行此操作)
我的问题是,每当我试图添加一个JPanel或JLabel或任何东西到我的框架,它不会被放在它上面,我的9x9网格会不断缩放到我的窗口大小。我应该如何添加计时器显示和提交名称部分,以便我可以在窗口上看到它!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MS extends JFrame implements ActionListener{
static JFrame bframe;
static JPanel p;
static double[] bomb;
public MS() {
p = new JPanel(new GridLayout(9,10));
JButton btn;
bomb = new double[81];
for(int i=0; i<81; i++)
bomb[i] = Math.random();
for (int i=0; i< 81; i++) {
btn = new JButton();
btn.addActionListener(this);
btn.setActionCommand(Integer.toString(i));
p.add(btn);
}
}
public static void main(String[] args) {
bframe=new MS(); //CREATE me and
bframe.add(timelabel);
bframe.add(p); //add the JPanel
bframe.setLocation(32,32); //where my upper left hand corner goes
//bframe.setSize(64*width, 64*height);
bframe.setSize(500,500);
bframe.setVisible(true); //I start out invisible
bframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //need this for the window manager
}
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource();
int temp = Integer.parseInt(e.getActionCommand());
System.out.printf("%s\n", e.getActionCommand());
int count = 0;
String total = "";
if(bomb[temp] > 0.15) {
//for top line
if((temp!=0) && (temp!=1) && (temp!=2) && (temp!=3) && (temp!=4) &&(temp!=5) && (temp!=6) && (temp!=7) && (temp!=8)) {
if((temp!=0) && (temp!=9) && (temp!=18) && (temp!=27) && (temp!=36) && (temp!=45) && (temp!=54) && (temp!=63) && (temp!=72))
if(bomb[temp-10] <= 0.15)
count++;
if(bomb[temp-9] <= 0.15)
count++;
if((temp!=8) && (temp!=17) && (temp!=26) && (temp!=35) && (temp!=44) && (temp!=53) && (temp!=62) && (temp!=71) && (temp!=80))
if(bomb[temp-8] <= 0.15)
count++;
}
if((temp!=0) && (temp!=9) && (temp!=18) && (temp!=27) && (temp!=36) && (temp!=45) && (temp!=54) && (temp!=63) && (temp!=72))
if(bomb[temp-1] <= 0.15)
count++;
if((temp!=8) && (temp!=17) && (temp!=26) && (temp!=35) && (temp!=44) && (temp!=53) && (temp!=62) && (temp!=71) && (temp!=80))
if(bomb[temp+1] <= 0.15)
count++;
if((temp!=72) && (temp!=73) && (temp!=74) && (temp!=75) && (temp!=76) && (temp!=77) && (temp!=78) && (temp!=79) && (temp!=80)) {
if((temp!=0) && (temp!=9) && (temp!=18) && (temp!=27) && (temp!=36) && (temp!=45) && (temp!=54) && (temp!=63) && (temp!=72))
if(bomb[temp+8] <= 0.15)
count++;
if(bomb[temp+9] <= 0.15)
count++;
if((temp!=8) && (temp!=17) && (temp!=26) && (temp!=35) && (temp!=44) && (temp!=53) && (temp!=62) && (temp!=71) && (temp!=80))
if(bomb[temp+10] <= 0.15)
count++;
}
if(count==0)
jb.setText("");
else {
total=Integer.toString(count);
jb.setText(total);
if(count==1)
jb.setForeground(Color.blue);
if(count==2)
jb.setForeground(Color.green);
if(count==3)
jb.setForeground(Color.red);
}
}
else
jb.setText("B");
}
}
为了清楚起见:我想知道的是为什么我的9x9网格框的缩放与窗口,我如何可以修复它,以及我如何可以添加另外1或2个j面板,这样我就可以完成我的项目的其他部分。
尝试使用以下方法(未经测试):
public Test() {
setContentPane(new JPanel(new BorderLayout()));
JPanel p = new JPanel(new GridLayout(9, 9));
JButton btn;
bomb = new double[81];
for (int i = 0; i < 81; i++)
bomb[i] = Math.random();
for (int i = 0; i < 81; i++) {
btn = new JButton();
btn.addActionListener(this);
btn.setActionCommand(Integer.toString(i));
p.add(btn);
}
getContentPane().add(p, BorderLayout.CENTER); // add the JPanel
JPanel timerPanel = new JPanel();
timerPanel.add(timelabel);
getContentPane().add(timerPanel, BorderLayout.EAST);
setLocation(32, 32); // where my upper left hand corner goes
// bframe.setSize(64*width, 64*height);
setSize(500, 500);
setVisible(true); // I start out invisible
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // need this for the window manager
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Test();
}
});
}
所有与Swing相关的事件都应该放在事件调度线程上,这就是为什么应该使用invokeLater(Runnable)
方法的原因。您需要使用另一个父面板,以便将网格放在中间,将timerPanel
放在左侧BorderLayout
可能是最好的布局管理器。它将网格面板添加到中心,并将timerPanel
添加到左侧。任何与计时有关的内容都应添加到timerPanel
。应按如下方式添加任何其他组件:
getContentPane().add(yourComponent, constraint);
其中约束
是边界布局之一。北
,边界布局。南部
,边界布局。西部
,边界布局。东部
,等等。希望这有帮助!
问题内容: 我有CentOS 5,但是我不知道在Linux上安装Java SDK的步骤。 在哪里下载RPM文件,接下来该怎么做才能完全安装该文件? 然后,我需要安装Tomcat。 还是有所有现成的包装? 问题答案: 以下命令将返回与Java直接相关的所有软件包的列表。它们的格式为。 如果没有可用的软件包,则可能需要下载新的存储库以进行搜索。我建议看看Dag Wieers的回购协议。下载后,请再次尝
问题内容: 我想用需要Java 8的最新JavaFX进行一些编程。我正在使用IntelliJ 13 CE和Mac OS X 9 Mavericks。我运行了Oracle的Java 8安装程序,文件看起来像最终在 但以前的版本在 不知道为什么要用最新的安装程序/Library代替它/System/Library(也不知道有什么区别)。但是找不到1.8,所以我找到的有关如何设置当前Java版本的所有帖
我是全栈开发者(PHP JS)。 我想要一个后端VS代码和一个前端VS代码。 我在教程中看到了一个绿色的VS代码,但我不知道如何将两个VS代码安装在一起。
我对我的应用程序有一个要求。我有一个用来显示书籍的应用程序和一个用来阅读书籍的应用程序,基本上是。我有两个问题: null 更改manifest后,看起来如下所示:
问题内容: 我想在XP上安装JDK 1.5和1.6,可以吗?怎么做 另外,我正在使用Eclipse如何针对不同的项目使用不同的JDK进行设置? 谢谢。 问题答案: 您可以轻松安装不同的JDK:只需指定不同的文件夹。 您可以在Eclipse 窗口/首选项/已安装的JRE中* 设置已安装的JDK。 * 您可以在 Project / Properties / Java Compiler中* 为每个项目选
I使用macOS High Sierra 10.13.1版 我想在我的Mac电脑上安装两个xampp(xampp 7.0.27和xampp 7.1.13) 首先,我在我的Mac中安装了xampp 7.0.27并且它可以工作。它存储在中 其次,我尝试在我的Mac上安装xampp 7.1.13。似乎失败了。因为它也存储在XAMPP中。似乎不习惯这条路 我该如何解决这个问题?