frame.add(label,JFrame.TOP)错误

时间:2013-06-20 17:27:08

标签: java intellij-idea jframe jlabel

我在线程“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();
}
}

2 个答案:

答案 0 :(得分:6)

您使用frame.add(label, JLabel.BOTTOM);错误。文档说:

  

comp - 要添加的组件

     

index - 插入组件的位置,或-1以将组件附加到结尾

JFrame.CENTER等于0,巧合。这就是它的原因。 TOPBOTTOM分别为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)。那应该够了。