为什么我的标签不显示? (JAVA)

时间:2016-06-05 13:23:49

标签: java swing

我试图制作一些东西,但我的标签"钱"没有出现,我不知道为什么。我一直试图修复它。这是我的代码:

     public class main {
static int amountOM = 200;
static JFrame jf = new JFrame("Game");
static JPanel jp = new JPanel();
static JPanel jp2 = new JPanel();
static JButton exit = new JButton("Exit");
static JLabel money = new JLabel("$ "+amountOM);


public static void main(String[] args){
    start();
}

public static void start() {


    jf.setLayout(null);
    jf.pack();

    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setSize(500, 500);


    jf.setLocationRelativeTo(null);
    jf.setResizable(false);

    jp.setLocation(0, 0);
    jp.setSize(400, 500);

    jp2.setLocation(400, 0);
    jp2.setSize(100, 500);

    exit.setLocation(405, 10);
    exit.setSize(85,50);

    money.setLocation(405, 200);
    money.setSize(100,50);

    jp2.setBackground(Color.gray);
    money.setBackground(Color.black);

    jf.add(jp);
    jf.add(jp2);
    jf.add(exit);
    jf.add(money);

    jf.setVisible(true);

}
 }

如果你知道这个问题,请告诉我。谢谢。

(它一直告诉我,我的帖子主要是代码,请添加更多详细信息,以便我在此处添加此文字)

1 个答案:

答案 0 :(得分:1)

你用JPanel覆盖你的JLabel,确切地说是jp2。解决方案是不使用绝对定位和零布局,因为它太容易像你一样在脚中射击自己。因为这类问题的所有类似答案都会告诉你:学习和使用布局管理器。

虽然null布局和setBounds()似乎可以像创建复杂GUI的最简单和最好的方式一样,但更多的Swing GUI会让您遇到更严重的困难。使用它们时当GUI调整大小时,他们不会调整组件的大小,他们是增强或维护的皇室女巫,当他们放置在滚动窗格中时,他们完全失败,当他们在所有平台或屏幕分辨率不同时看起来很糟糕原来的。

您可以在此处找到布局管理器教程:Layout Manager Tutorial,您可以在此处找到指向Swing教程和其他Swing资源的链接:Swing Info

例如:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.*;

public class Game2 extends JPanel {

    private static final int BOX_W = 400;
    private static final int BOX_H = BOX_W;
    private static final Color SIDE_BG = Color.GRAY;
    private JLabel moneyLabel = new JLabel("$20.00");

    public Game2() {
        JButton exitButton = new JButton("Exit");
        JPanel exitBtnPanel = new JPanel();
        exitBtnPanel.add(exitButton);
        exitBtnPanel.setOpaque(false);
        int eb = 2;
        exitBtnPanel.setBorder(BorderFactory.createEmptyBorder(eb, eb, eb, eb));

        JPanel moneyPanel = new JPanel();
        moneyPanel.add(moneyLabel);
        moneyPanel.setOpaque(false);

        JPanel sidePanel = new JPanel();
        sidePanel.setBackground(SIDE_BG);
        sidePanel.setLayout(new BoxLayout(sidePanel, BoxLayout.PAGE_AXIS));
        sidePanel.add(exitBtnPanel);
        sidePanel.add(moneyPanel);

        setLayout(new BorderLayout());
        add(Box.createRigidArea(new Dimension(BOX_W, BOX_H)));
        add(sidePanel, BorderLayout.LINE_END);
    }

    private static void createAndShowGui() {
        Game2 mainPanel = new Game2();

        JFrame frame = new JFrame("Game2");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> createAndShowGui());
    }
}