Java 看不见的GUI?(爪哇)(摇摆)

Java 看不见的GUI?(爪哇)(摇摆),java,swing,user-interface,Java,Swing,User Interface,我正在使用swing编写这个程序。每次我导出程序并运行它时,我尝试设置的GUI都不会出现。JFrame有,但内部组件没有。提前谢谢~Airis 代码: 错误:无首先… panel\u Title.油漆(logo\u out)这不是Swing中图形的工作方式…也不是Swing中图像的绘制方式 其次… 您应该使用布局管理器,它们将大大减少潜在的问题,并降低代码的复杂性 第三 应用程序应该在事件调度线程的上下文中启动 public static void main(String args[]) {

我正在使用swing编写这个程序。每次我导出程序并运行它时,我尝试设置的GUI都不会出现。JFrame有,但内部组件没有。提前谢谢~Airis

代码:


错误:无首先…

panel\u Title.油漆(logo\u out)这不是Swing中图形的工作方式…也不是Swing中图像的绘制方式

其次…

您应该使用布局管理器,它们将大大减少潜在的问题,并降低代码的复杂性

第三

应用程序应该在事件调度线程的上下文中启动

public static void main(String args[]) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            // Construct your UI here...
        }
    });
}
第四

正如Andrew也指出的(+1)…您的图像“似乎”是内部资源,无法通过
文件
引用访问。您需要以不同的方式加载此类(嵌入式)资源

logo = ImageIO.read(Login.class.getResource("/Data/images/logo_letsmeet.png"));
您还忽略了这些资源
null
的可能性,这是一种非常危险的做法

我建议你通读一遍


除了@MadProgammer提出的所有建议外,您还需要将控件添加到
JFrame
内容窗格中,如下所示:

login_Frame.getContentPane().add(panel_Title);
login_Frame.getContentPane().add(login_Panel);
...
然后你的控件就会出现

更新:

运行实际代码,并向容器添加彩色边框(
JPanels
),我得到以下结果:

panel_Title.setBorder(BorderFactory.createLineBorder(Color.BLUE));
login_Panel.setBorder(BorderFactory.createLineBorder(Color.RED));
panel_Divider.setBorder(BorderFactory.createLineBorder(Color.GREEN));
register_Panel.setBorder(BorderFactory.createLineBorder(Color.YELLOW));

基本上,您的代码存在布局配置问题。同样,遵循@MadProgammer的建议。您可以在将来使用此边界技巧来调试布局

import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Login {
    public static void login_Interface(){

        //Start GUI style//
        try {
                 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e1) {
             e1.printStackTrace();
        } catch (InstantiationException e1) {
             e1.printStackTrace();
        } catch (IllegalAccessException e1) {
             e1.printStackTrace();
         } catch (UnsupportedLookAndFeelException e1) {
              e1.printStackTrace();
         }
          //      End     //

          JFrame login_Frame = new JFrame("Login - LetsMeet");
          login_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         login_Frame.setSize(750, 650);
          login_Frame.setResizable(true);

         JPanel panel_Title = new JPanel();                            //PANEL Title
         panel_Title.setBounds(0, 0, 750, 150);
         panel_Title.setLayout(null);
         Image logo = null;
         try {
              logo = ImageIO.read(new File("Data/images/logo_letsmeet.png"));
          } catch (IOException e) {
              e.printStackTrace();
         }
         Graphics2D logo_out = ((BufferedImage) logo).createGraphics();
         panel_Title.paint(logo_out);

           JPanel login_Panel = new JPanel();                            //LOGIN Panel
          login_Panel.setBounds(0, 150, 350, 150);
          login_Panel.setLayout(null);
          JTextField username_login = new JTextField("Username");
    username_login.setBounds(100, 50, 100, 25);
    JPasswordField password_login = new JPasswordField();
    password_login.setBounds(200, 50, 100, 25);
    JButton login_go = new JButton("Login");
    login_go.setBounds(200, 50, 100, 25);
    login_Panel.add(password_login);
    login_Panel.add(username_login);


    JPanel panel_Divider = new JPanel();                          //PANEL Divider
    login_Panel.setBounds(350, 150, 50, 150);
    panel_Divider.setSize(50, 100);
    panel_Divider.setLayout(null);
    Image sep = null;
    try {
        sep = ImageIO.read(new File("Data/images/sep.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    Graphics2D div = ((BufferedImage) sep).createGraphics();
    panel_Title.paint(div);

    JPanel register_Panel = new JPanel();                         //REGISTER Panel
    register_Panel.setBounds(400, 150, 350, 150);
    register_Panel.setLayout(null);

    login_Frame.add(panel_Title);
    login_Frame.add(login_Panel);
    login_Frame.add(panel_Divider);
    login_Frame.add(register_Panel);
    login_Frame.setVisible(true);
}
}


您不在此程序中设置任何布局管理器。这就是为什么你不能显示任何东西的原因。为了更快地获得更好的帮助,请发布一个。2) 不要
setLayout(null)
。3) 请参见4)
logo_letsmeet.png
看起来像是一个应用程序资源,因此可以通过URL从类路径访问它。5) 在EDT.Amen上启动GUI。你不能猜测这些东西,并期待它神奇地工作。1+。
JFrame#add
自动遵从
getContentPane()
(从Java 6开始)。到目前为止,我唯一遇到问题的方法是
JFrame#removeAll
,它在Java 7下似乎删除了根窗格…拼写为
getContentPane()
@MadProgrammer:我不得不帮助一个使用BoxLayout但有问题的人,因为他将其传递到JFrame的
setLayout(…)
(没问题),但随后将JFrame传递到BoxLayout的构造函数(大问题!)@HovercraftFullOfEels哦,这是一个需要记住的绝妙技巧!谢谢你的帖子,我会试试这个,谢谢你@MadProgrammer,我会开始实施你的一些技巧。
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Login {
    public static void login_Interface(){

        //Start GUI style//
        try {
                 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e1) {
             e1.printStackTrace();
        } catch (InstantiationException e1) {
             e1.printStackTrace();
        } catch (IllegalAccessException e1) {
             e1.printStackTrace();
         } catch (UnsupportedLookAndFeelException e1) {
              e1.printStackTrace();
         }
          //      End     //

          JFrame login_Frame = new JFrame("Login - LetsMeet");
          login_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         login_Frame.setSize(750, 650);
          login_Frame.setResizable(true);

         JPanel panel_Title = new JPanel();                            //PANEL Title
         panel_Title.setBounds(0, 0, 750, 150);
         panel_Title.setLayout(null);
         Image logo = null;
         try {
              logo = ImageIO.read(new File("Data/images/logo_letsmeet.png"));
          } catch (IOException e) {
              e.printStackTrace();
         }
         Graphics2D logo_out = ((BufferedImage) logo).createGraphics();
         panel_Title.paint(logo_out);

           JPanel login_Panel = new JPanel();                            //LOGIN Panel
          login_Panel.setBounds(0, 150, 350, 150);
          login_Panel.setLayout(null);
          JTextField username_login = new JTextField("Username");
    username_login.setBounds(100, 50, 100, 25);
    JPasswordField password_login = new JPasswordField();
    password_login.setBounds(200, 50, 100, 25);
    JButton login_go = new JButton("Login");
    login_go.setBounds(200, 50, 100, 25);
    login_Panel.add(password_login);
    login_Panel.add(username_login);


    JPanel panel_Divider = new JPanel();                          //PANEL Divider
    login_Panel.setBounds(350, 150, 50, 150);
    panel_Divider.setSize(50, 100);
    panel_Divider.setLayout(null);
    Image sep = null;
    try {
        sep = ImageIO.read(new File("Data/images/sep.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }
    Graphics2D div = ((BufferedImage) sep).createGraphics();
    panel_Title.paint(div);

    JPanel register_Panel = new JPanel();                         //REGISTER Panel
    register_Panel.setBounds(400, 150, 350, 150);
    register_Panel.setLayout(null);

    login_Frame.add(panel_Title);
    login_Frame.add(login_Panel);
    login_Frame.add(panel_Divider);
    login_Frame.add(register_Panel);
    login_Frame.setVisible(true);
}