Java 如何在没有布局管理器的情况下显示JLabel 我正在为一个最终的项目做一个游戏,我需要一个标签,它是一个大的“X”出现在JPAND的中间。我有JPanel出现,但标签不会出现,因为我没有布局管理器,但如果我使用布局管理器,我的整个项目都会改变。这是我必须做的项目,这样你就可以看到我在努力做什么
创建一个游戏,帮助新的鼠标用户提高他们的手眼协调。在JFrame中,使用八行六列在GridLayout中显示48个JPanel的数组。在其中一个面板上随机显示一个X。当用户单击正确的面板(显示X的面板)时,移除X并将其显示在其他面板上。在用户成功“点击”正确的面板10次后,显示一条祝贺消息,其中包括用户的百分比(点击次数除以点击次数)。将文件另存为JCatchTheMouse.java 这是我的密码Java 如何在没有布局管理器的情况下显示JLabel 我正在为一个最终的项目做一个游戏,我需要一个标签,它是一个大的“X”出现在JPAND的中间。我有JPanel出现,但标签不会出现,因为我没有布局管理器,但如果我使用布局管理器,我的整个项目都会改变。这是我必须做的项目,这样你就可以看到我在努力做什么,java,eclipse,swing,layout,jlabel,Java,Eclipse,Swing,Layout,Jlabel,创建一个游戏,帮助新的鼠标用户提高他们的手眼协调。在JFrame中,使用八行六列在GridLayout中显示48个JPanel的数组。在其中一个面板上随机显示一个X。当用户单击正确的面板(显示X的面板)时,移除X并将其显示在其他面板上。在用户成功“点击”正确的面板10次后,显示一条祝贺消息,其中包括用户的百分比(点击次数除以点击次数)。将文件另存为JCatchTheMouse.java 这是我的密码 package CatchTheMouse; import java.awt.*; impor
package CatchTheMouse;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CatchTheMouse extends JFrame implements ActionListener, MouseListener{
final int ROWS = 8;
final int COLS = 6;
final int GAP = 2;
final int MAX_PANELS = ROWS * COLS;
int clicks;
int hits;
int percentage = 0;
int width;
int height;
int panelX;
int panelY;
int whichPanel = (int)(Math.random() * 48 + 1);
int numberOfPanels = 1;
JLabel grats = new JLabel("");
JLabel spot = new JLabel("X");
JPanel[] panel = new JPanel[MAX_PANELS];
JPanel pane = new JPanel(new GridLayout(ROWS, COLS, GAP, GAP));
Font xFont = new Font("Ariel", Font.BOLD, 30);
Font font = new Font("Ariel", Font.PLAIN, 12);
public CatchTheMouse() {
super("Catch the Mouse");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
add(spot);
spot.setFont(xFont);
add(grats);
grats.setFont(font);
add(pane);
for(int x = 0; x < MAX_PANELS; ++x) {
panel[x] = new JPanel();
pane.add(panel[x]);
panel[x].setBackground(Color.RED);
}
pane.setBackground(Color.BLACK);
panelX = panel[whichPanel].getX();
panelY = panel[whichPanel].getY();
width = panel[whichPanel].getWidth() / 2;
height = panel[whichPanel].getHeight() / 2;
spot.setBounds(panelX, panelY, width, height);
}
public void mouseClicked(MouseEvent e) {
clicks = e.getClickCount();
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void actionPerformed(ActionEvent e) {
}
public static void main(String[] args) {
CatchTheMouse frame = new CatchTheMouse();
frame.setVisible(true);
}
}
packatchethemouse;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类CatchTheMouse扩展JFrame实现ActionListener、MouseStener{
最终整数行=8;
最终整数COLS=6;
最终int间隙=2;
最终int MAX_面板=行*列;
int点击;
整数命中率;
整数百分比=0;
整数宽度;
内部高度;
国际专题讨论会X;
专家组;
int whichPanel=(int)(Math.random()*48+1);
int numberOfPanels=1;
JLabel-grats=新JLabel(“”);
JLabel spot=新JLabel(“X”);
JPanel[]面板=新的JPanel[MAX_面板];
JPanel窗格=新JPanel(新网格布局(行、列、间隙、间隙));
Font xFont=新字体(“Ariel”,Font.BOLD,30);
Font Font=新字体(“Ariel”,Font.PLAIN,12);
公共捕鼠室(){
超级(“抓老鼠”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(300300);
加(点);
spot.setFont(xFont);
添加(grats);
grats.setFont(字体);
添加(窗格);
对于(int x=0;x
您的位置正在所有其他面板后面绘制。如果你加上
setComponentZOrder(spot, 0);
这将导致它被绘制在所有其他内容之上
更好的方法是在面板内部绘制x,而不是在面板顶部
编辑:
您可以使用将x添加到特定面板
panel[0].add(spot);
制作另一个
JPanel
并将其放入第一个JPanel
中。将JLabel
和Layout
添加到第二个JPanel
,即第一个JPanel
中
设置嵌套-
JPanel
和其他坐标的相应位置。我该怎么做?我刚试过,但现在它只显示X,什么也不显示else@buckley183我的意思是不要这样做(将x添加到主面板),但是如果你这样做了,你必须弄清楚如何使标签的背景透明Font xFont=new Font(“Ariel”,Font.BOLD,30)代码>拼写为“Arial”(无“E”),可能仅在Windows上可用。出于这两个原因,最好使用Font.SANS\u SERIF
1)可以在编译时检查。2) 是跨平台的。也就是说,它将在Windows上使用Arial字体,在OS X上使用Helvetica字体,在Unix/Linux上使用默认的未修饰('san serif')字体。“如何在没有布局管理器的情况下显示JLabel”顺便问一句-当问题描述明确指出“。在GridLayout中显示48个JPanel的数组…”时,为什么不使用布局管理器就尝试这样做?