【问题标题】:JLabel doesn't show upJLabel 不显示
【发布时间】:2013-04-27 22:42:20
【问题描述】:

我正在开发一个程序,但我的 JLabel 没有出现。我的 JButton 工作得很好(它出现了),但由于某种原因 JLabel 没有出现。我在网上查过,但我没有找到任何东西。

package com.hinx.client;

import java.awt.Color;    
import javax.swing.*;

public class Main {

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

    static void createWindow()
    {           

        //Create panel
        JPanel content = new JPanel();
        content.setLayout(null);

        //Build the frame
        JFrame frame = new JFrame("Hinx - A marketplace for apps - Client ALPHA_0.0.1");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 400);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.add(content);
        frame.setVisible(true);

        //Add the login button
        JButton login = new JButton("Login");
        login.setBounds(0, 342, 150, 30);

        //Create login label
        JLabel loginlabel = new JLabel("Login Area");

        //Create login panel
        JPanel loginpanel = new JPanel();
        loginpanel.setLayout(null);
        loginpanel.setBounds(0, 0, 150, 400);
        loginpanel.setBackground(Color.gray);
        loginpanel.add(login);
        loginpanel.add(loginlabel);         

        content.add(loginpanel);
    }       
}

【问题讨论】:

    标签: java swing window jbutton jlabel


    【解决方案1】:

    我在网上查了一下,但我没有找到任何东西。

    • 在添加/创建 JComponents (frame.add(content);) 之前,JFrame 是可见的

    • 将代码行 frame.setVisible(true);(关于 JFrame 的一切都更好)移动到构造函数的末尾

    【讨论】:

      【解决方案2】:

      为您的panel 设置layout。举例:

      loginpanel.setLayout(new BorderLayout());
      

      您可以了解有关布局的更多信息here

      这是我得到的:

      【讨论】:

      • 我无法更改 JLabel 的位置,即使使用 setBounds();
      • “即使使用 setBounds(),我也无法更改 JLabel 的位置” 不要使用setBounds()
      • 好吧,我使用了 setLocation(),但它不起作用。我真的需要将 JLabel 放在特定位置。
      • @AndrewThompson 人们只是不想接受您必须使用布局管理器的事实。这不是 .NET!
      • “我真的需要将 JLabel 放在特定位置。” 如果您真的知道组件需要的尺寸以及如何放置它们,您可以包含该逻辑在自定义布局管理器中。但相信我,你不会。您真的只需要了解如何使用布局管理器(+ 布局填充、边框等)以及如何将它们相互嵌套。如果问题出在布局上,那么您的下一个问题应该集中在这个问题上。提供 GUI 外观的 ASCII 艺术。
      【解决方案3】:
      1. 使用布局。 FlowLayout 在这种情况下应该没问题。不要调用setBounds(),也不要将布局设置为null

      2. JPanel上添加标签和按钮

      3. 然后在JFrame上添加JPanel

      4. 拨打pack()而不是setSize()

      5. 最后拨打setVisible(true)

      祝你好运!

      【讨论】:

        【解决方案4】:

        你正在 setLayout null.

            JPanel loginpanel = new JPanel();
            loginpanel.setLayout(null);
        

        使用这个,

            JPanel loginpanel = new JPanel();
            loginpanel.setLayout(new BorderLayout());        
        

        EDT 上运行 UI,而不是在主线程上运行。阅读此post

        例子:

        public static void main(String [] args) 
            {
                Runnable r  = new Runnable() {
        
                    @Override
                    public void run() {
                        createWindow();
                    }
                };
        
                EventQueue.invokeLater(r);
            }   
        

        【讨论】:

          猜你喜欢
          • 2017-07-11
          • 2021-06-07
          • 1970-01-01
          • 2019-07-08
          • 2012-11-11
          • 2012-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多