Java Jpanel中的JLabel数组未显示
因此,我对此非常恼火,我似乎无法理解为什么这些jLabel没有被吸引到窗口。我一直在看我过去做过的另一个项目,它在JPanel中也使用了JLabels,看起来一切都很好。有人看到我把事情搞砸了吗Java Jpanel中的JLabel数组未显示,java,swing,jpanel,jlabel,Java,Swing,Jpanel,Jlabel,因此,我对此非常恼火,我似乎无法理解为什么这些jLabel没有被吸引到窗口。我一直在看我过去做过的另一个项目,它在JPanel中也使用了JLabels,看起来一切都很好。有人看到我把事情搞砸了吗 package lab19_20; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Random; public class Lab19_20 extends JFrame impl
package lab19_20;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Random;
public class Lab19_20 extends JFrame implements ActionListener, MouseListener
{
JLabel[] lblBoard = new JLabel[16];
int[] nums = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8};
int firstChoice = -1;
int tries = 0;
JLabel lblFirst;
JButton btnGame = new JButton("New Game");
JLabel lblTries = new JLabel("0");
JPanel pnlControls = new JPanel();
JPanel pnlBoard = new JPanel();
Font lblBoardFont = new Font("Helvetica", Font.BOLD, 30);
Container content = this.getContentPane();
public Lab19_20()
{
setTitle("The Concentration Game");
setVisible(true);
setSize(500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createLabels();
content.add(pnlBoard, BorderLayout.NORTH);
pnlControls.add(btnGame);
pnlControls.add(lblTries);
content.add(pnlControls, BorderLayout.SOUTH);
btnGame.addActionListener(this);
}
void createLabels()
{
pnlBoard.setLayout(new GridLayout(4, 4, 5, 5));
for(int i = 0; i < lblBoard.length; i++)
{
lblBoard[i] = new JLabel("", JLabel.CENTER);
lblBoard[i].setVisible(true);
lblBoard[i].setOpaque(true);
lblBoard[i].setBackground(Color.BLUE);
lblBoard[i].setForeground(Color.BLACK);
lblBoard[i].setFont(lblBoardFont);
lblBoard[i].addMouseListener(this);
lblBoard[i].setName("" + i);
pnlBoard.add(lblBoard[i]);
}
}
void shuffle()
{
int num1, num2, tmp = 0;
Random r = new Random();
for (int i = 0; i < 500; i++)
{
num1 = r.nextInt(nums.length);
num2 = r.nextInt(nums.length);
tmp = nums[num1];
nums[num1] = nums[num2];
nums[num2] = tmp;
}
}
@Override
public void actionPerformed(ActionEvent ae)
{
shuffle();
firstChoice = -1;
for (int i = 0; i < lblBoard.length; i++)
lblBoard[i].setText("");
tries = 0;
lblTries.setText("" + tries);
}
@Override
public void mouseClicked(MouseEvent me)
{
JLabel l = (JLabel) me.getSource();
int theNumber = Integer.parseInt(l.getName());
if (firstChoice == -1)
{
l.setText("" + nums[theNumber]);
lblFirst = l;
firstChoice = theNumber;
}
else if (nums[theNumber] != nums[firstChoice])
{
l.setText("" + nums[theNumber]);
pnlBoard.paintImmediately(0,0, pnlBoard.getWidth(), pnlBoard.getHeight());
try
{
Thread.sleep(250);
}
catch(InterruptedException blah){}
lblFirst.setText("");
l.setText("");
lblFirst = null;
firstChoice = -1;
tries++;
}
else
{
l.setText("" + nums[theNumber]);
firstChoice = -1;
tries++;
}
lblTries.setText("" + tries);
}
public static void main(String[] args)
{
Lab19_20 console = new Lab19_20();
}
@Override public void mousePressed(MouseEvent me) {}
@Override public void mouseReleased(MouseEvent me) {}
@Override public void mouseEntered(MouseEvent me) {}
@Override public void mouseExited(MouseEvent me) {}
}
包装lab19_20;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.util.Random;
公共类Lab19_20扩展JFrame实现ActionListener、MouseStener
{
JLabel[]lblBoard=新的JLabel[16];
int[]nums={1,1,2,2,3,3,4,4,5,5,6,6,7,7,8};
int firstChoice=-1;
int=0;
JLabel-lblFirst;
JButton btnGame=新JButton(“新游戏”);
JLabel lblTries=新JLabel(“0”);
JPanel pnlControls=新的JPanel();
JPanel pnlBoard=新的JPanel();
Font lblBoardFont=新字体(“Helvetica”,Font.BOLD,30);
容器内容=this.getContentPane();
公共实验室19_20()
{
setTitle(“专注游戏”);
setVisible(真);
设置大小(500400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createLabels();
内容。添加(pnlBoard,BorderLayout.NORTH);
pnlControls.add(btnGame);
pnlControls.add(lblTries);
添加(pnlControls,BorderLayout.SOUTH);
btnGame.addActionListener(此);
}
void createLabels()
{
pnlBoard.setLayout(新网格布局(4,4,5,5));
对于(int i=0;i
两件简单的事情
setVisible(true)代码>最后,在您建立基本UI之后
lblBoard[i].setText(“+i”)代码>代替(或同时)lblBoard[i].setName(“+i”)代码>
首先调用
setVisible(true)
last就是这样,只要我在setName之后添加了setText,它就解决了这个问题。想解释一下为什么它会这样对我吗?setVisible也在原来的位置工作(我总是在顶部执行setVisible,因为这是我老师教我的方式,最后设置它有多大不同?)1-它工作了,因为setText
改变了显示的内容setName
用作内部标记,主要用于GUI表单编辑器,但有时也用于其他用途(一些布局管理器使用它)。2-在构建UI之前调用setVisible
可能会使UI显示为“空”或在某些系统上仅部分更新,我们还建议最后调用它以避免这些问题…啊,感谢有关setVisible的信息。结果表明,它出错的原因不是我没有使用setName,而是因为我使用“”来清空setText。结果显示“”将导致标签不显示,而“”将显示。我猜“”不是有效字符串?我的教授告诉我们使用“”,我假设“”表示空文本。某种程度上,“
与使用null
(或多或少)是一样的,因为它会导致一个大小计算等于0x0
,使它看起来好像标签没有显示出来……啊,那么,这是否意味着我将使标签不显示的文本/名称置零?