Moncel 2022-12-07 17:09 采纳率: 86.7%
浏览 256
已结题

Java swing出现illegal component position报错如何解决

报错信息

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
    at java.desktop/java.awt.Container.addImpl(Container.java:1120)
    at java.desktop/javax.swing.JLayeredPane.addImpl(JLayeredPane.java:237)
    at java.desktop/java.awt.Container.add(Container.java:997)
    at FRAME.LoginFrame.iniBG(LoginFrame.java:38)
    at FRAME.LoginFrame.<init>(LoginFrame.java:30)
    at Main.main(Main.java:12)


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class LoginFrame extends JFrame implements ActionListener {

    private JButton oKButton;
    private JButton cancelButton;

    private JLabel userJLabel;
    private JLabel pwdJLabel;

    private int counter = 0;

    private JTextField userField;
    private JPasswordField pwdField;

    ImageIcon img = new ImageIcon("BGL.jpg");

    public LoginFrame() {
        setTitle("登录界面");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);
        setBounds(100, 100, 400, 300);
        initCom();
        iniBG();
        setVisible(true);
    }

    public void iniBG(){
        JLabel imgLabel = new JLabel(img);
        this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
        imgLabel.setBounds(100,100,img.getIconWidth(),img.getIconHeight());
        this.getLayeredPane().add(imgLabel,new Integer(Integer.MIN_VALUE));
        ((JPanel)this.getContentPane()).setOpaque(false);
    }

    public void initCom() {
        userJLabel = new JLabel("用户名");
        userJLabel.setBounds(100, 80, 50, 30);
        add(userJLabel);
        userField = new JTextField();
        userField.setBounds(150, 80, 100, 30);
        add(userField);
        pwdJLabel = new JLabel("密    码");
        pwdJLabel.setBounds(100, 130, 50, 30);
        add(pwdJLabel);
        pwdField = new JPasswordField();
        pwdField.setBounds(150, 130, 100, 30);
        add(pwdField);
        pwdField.setEchoChar('$');
        oKButton = new JButton("提交");
        oKButton.setBounds(100, 200, 70, 40);
        add(oKButton);
        oKButton.addActionListener(this);
        cancelButton = new JButton("重置");
        cancelButton.setBounds(220, 200, 70, 40);
        add(cancelButton);
        cancelButton.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

        if (arg0.getSource() == oKButton) {
            if (userField.getText().equals("") || pwdField.getText().equals("")) {
                JOptionPane.showMessageDialog(null, "用户名或密码不能为空!");
            }else{
                if (userField.getText().equals("dh") && pwdField.getText().equals("123")) {
                    new MainFrame();
                    this.dispose();
                } else {
                    userField.setText("");
                    pwdField.setText("");
                    counter++;
                    if (counter == 5) {
                        System.exit(0);
                    }
                    JOptionPane.showMessageDialog(null, "用户名或密码错误!");
                }
            }

        } else {
            if (arg0.getSource() == cancelButton) {
                userField.setText("");
                pwdField.setText("");
            }
        }
    }

}




  • 写回答

2条回答 默认 最新

  • pzzhao 2022-12-07 18:05
    关注

    这一行 this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
    前面加上这个this.getLayeredPane().setLayout(null);

    另外需要注意你的图片路径,如果你是放在项目的根目录下你可以这么写,如果不是的话,相对项目根路径的路径都加上

    public void iniBG() {
            JLabel imgLabel = new JLabel(img);
            this.getLayeredPane().setLayout(null);
    //        this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
            imgLabel.setBounds(100, 100, img.getIconWidth(), img.getIconHeight());
            this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
            ((JPanel) this.getContentPane()).setOpaque(false);
        }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月10日
  • 已采纳回答 12月7日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿