大佬教程收集整理的这篇文章主要介绍了如何使用 JLabel 获取 JFrame?尝试时出错,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试制作扫雷艇。我知道可能有更好的方法来做到这一点,但我正在尝试这样做。
我的问题出在 grIDSquare 类中。这个类是一个 JLabel,我需要包含 grIDSquare 的框架。我尝试使用 @H_345_5@minesweeperFrame frame = (minesweeperFramE) SwingUtilitIEs.getwindowAncestor(this); 行获取框架。我遇到的问题是 frame
为空并且从未设置为 grIDSquares 框架。有什么办法可以解决这个问题。
public class Main {
public static voID main(String[] args) {
minesweeperFrame frame = new minesweeperFrame();
}
}
grIDSquare.java
import java.awt.color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.objects;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.border;
public class grIDSquare extends JLabel implements MouseListener{
Boolean isBomb = false;
int grIDNum;
int n1,n2,n3,n4,n6,n7,n8,n9;
int bombnumber;
minesweeperFrame frame = (minesweeperFramE) SwingUtilitIEs.getwindowAncestor(this);
grIDSquare(int grIDNum){
this.grIDNum = grIDNum;
n1 = grIDNum - 10 - 1; //top left
n2 = grIDNum - 10 ; //top center
n3 = grIDNum - 10 + 1; //top left
n4 = grIDNum - 1;//center left
n6 = grIDNum + 1;//center right
n7 = grIDNum + 10 -1;//Bottom left
n8 = grIDNum + 10; //Bottom Center
n9 = grIDNum + 10 + 1; //Bottom Right
int neighbors[] = {n1,n9};
try {
//get the bomb number
for(int i:neighbors) {
if(frame.getSquares().get(i).getIsBomb()) { // if any neighbor is a bomb increase bombnumber ---------- frame.getSquares().get(i).getIsBomb()
bombnumber++;
}
System.out.println("WORKS");
}
}
catch(Exception E){
System.out.println(E);
}
setText("");
setHorizontalAlignment(JLabel.CENTER);
setVerticalAlignment(JLabel.CENTER);
setFont(new Font("copperplate Gothic Bold",Font.PLAIN,20));
setForeground(new color(0x000000)); //set Font color CHANGE FOR EACHER numbER
setSize(50,50);
border border = borderFactory.createlineborder(color.darkGray,5);
setborder(border);
setBACkground(new color(0xd3d3d3)); //set BACkground color ----- change to #424242 after clicked
setopaque(true);//display BACkground color
addMouseListener(this);
}
public Boolean getIsBomb() {
return isBomb;
}
public voID setIsBomb(Boolean isBomb) {
this.isBomb = isBomb;
}
@OverrIDe
public voID mouseClicked(MouseEvent E) {
// Todo auto-generated method stub
}
@OverrIDe
public voID mousepressed(MouseEvent E) {
// Todo auto-generated method stub
if(e.getbutton() == MouseEvent.button1) {
setText("left Click!");
if(isBomb) {
setText("bomb");
}
}
if(e.getbutton() == MouseEvent.button3) {
setText("Flag");
}
}
@OverrIDe
public voID mouseReleased(MouseEvent E) {
// Todo auto-generated method stub
}
@OverrIDe
public voID mouseEntered(MouseEvent E) {
// Todo auto-generated method stub
}
@OverrIDe
public voID mouseExited(MouseEvent E) {
// Todo auto-generated method stub
}
}
@H_526_2@mineseeperFrame.java
import java.awt.GrIDLayout;
import java.awt.color.*;
import java.util.ArrayList;
import javax.swing.*;
public class minesweeperFrame extends JFrame{
private final int numcolumns = 10;
private int numRows = 8;
int numBombs = 0;
ArrayList<grIDSquare> squares = new ArrayList<grIDSquare>();
minesweeperFrame(){
settitle("minesweeper");
setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
setSize(1000,850);
setResizable(false);
setLayout(new GrIDLayout(numRows,numcolumns,1,1));
setVisible(true);
//Fill ArrayList and add to frame
for(int i = 0; i < 80;i++) {
squares.add(new grIDSquare(i));
add(squares.get(i));
}
//AddBombs
while(numbombs < 10) {
squares.get((int) (Math.random()*80)).setIsBomb(true);
numbombs++;
}
}
public ArrayList<grIDSquare> getSquares() {
return squares;
}
public int getGrIDRows() {
return numRows;
}
public int getGrIDcolumns() {
return numcolumns;
}
}
您不能在初始化期间执行此操作:
@H_345_5@minesweeperFrame frame = (minesweeperFramE) SwingUtilities.getWindowAncestor(this);
组件正在创建中,但尚未添加到框架中,因此您将获得 null。
而且你直接把gridsquare加到frame里,这是错误的,必须加到contentPane上,请阅读:
以上是大佬教程为你收集整理的如何使用 JLabel 获取 JFrame?尝试时出错全部内容,希望文章能够帮你解决如何使用 JLabel 获取 JFrame?尝试时出错所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。