我试图制作一些东西,但我的标签"钱"没有出现,我不知道为什么。我一直试图修复它。这是我的代码:
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);
}
}
如果你知道这个问题,请告诉我。谢谢。
(它一直告诉我,我的帖子主要是代码,请添加更多详细信息,以便我在此处添加此文字)
答案 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());
}
}