如何在没有布局管理器的情况下显示JLabel

时间:2014-12-05 23:12:29

标签: java eclipse swing layout jlabel

我正在制作一个最终项目的游戏,我需要在JPanel的中间出现一个大的“X”标签。我有JPanels出现但标签不会出现,因为我没有布局管理器,但如果我使用布局管理器,我的整个项目都会被更改。这是我必须做的项目,你可以看到我正在尝试做什么。

  

创建一款可帮助新鼠标用户改善手眼协调能力的游戏。在JFrame中,使用8行和6列在GridLayout中显示48个JPanel的数组。在其中一个面板上随机显示X.当用户单击正确的面板(显示X的面板)时,删除X并将其显示在另一个面板上。在用户成功“击中”正确的面板10次后,显示包含用户百分比(点击次数除以点击次数)的祝贺消息。将文件另存为JCatchTheMouse.java。

这是我的代码

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);
    }
}

2 个答案:

答案 0 :(得分:0)

你的位置被吸引到所有其他面板后面。如果你添加

setComponentZOrder(spot, 0);

这将导致它被绘制在其他一切之上。

更好的方法是在你的面板上绘制x而不是在它们之上。

编辑:

您可以使用

将x添加到特定面板
panel[0].add(spot);

答案 1 :(得分:0)

制作另一个JPanel并将其放在第一个JPanel内。将JLabelLayout添加到第二个JPanel,第一个JPanel内。{/ p>

相应地设置嵌套 - {{1}}和其他坐标位置。