我在线程“main”中遇到异常错误java.lang.IllegalArgumentException:非法组件位置。当我做frame.add(label,JFrame.CENTER)但是当我改变它时,它工作 它很有用。
package com.java;
import javax.swing.*;
import sun.audio.*;
import java.awt.*;
public class PlayClip extends JFrame{
public static void frame(){
JFrame frame = new JFrame("COLLIN");
frame.setSize(1086, 1200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon image = new ImageIcon("C:MYFILE");
JLabel label = new JLabel(image);frame.setResizable(false);
frame.add(label, JLabel.BOTTOM);
frame.setVisible(true);
}
public static void main(String[] args){
frame();
}
}
答案 0 :(得分:6)
您使用frame.add(label, JLabel.BOTTOM);
错误。文档说:
comp - 要添加的组件
index - 插入组件的位置,或-1以将组件附加到结尾
JFrame.CENTER
等于0,巧合。这就是它的原因。 TOP
和BOTTOM
分别为1和3。当你使用它们时,就像在数组/列表上获取索引越界错误。
您应该考虑使用layout manager,因为此方法不适合您的想法。
这个概念证据可能符合您的要求:
public static void main(String[] args) {
JFrame frame = new JFrame("COLLIN");
frame.setSize(1086, 1200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("my text", SwingConstants.CENTER);
frame.setResizable(false);
frame.add(label);
frame.setVisible(true);
}
答案 1 :(得分:0)
在frame.add(label, JLabel.BOTTOM);
行中,您为frame
分配了一个对齐选项,而不是JLabel
。因此,您应该使用JFrame
中的常量,而不是JLabel
。
JLabel
的常量用于对齐标签内的文本。
使用frame.add(label)
。那应该够了。