-1

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

2 回答 2

6

你用frame.add(label, JLabel.BOTTOM);错了。文档说:

comp - 要添加的组件

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

JFrame.CENTER等于0,巧合。这就是它起作用的原因。 TOP分别BOTTOM为 1 和 3。当您使用它们时,就像在数组/列表上获取索引越界错误一样。

您应该考虑使用布局管理器,因为此方法不适用于您认为的用途。


这个概念证明可能会满足您的要求:

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);
}
于 2013-06-20T17:45:45.650 回答
0

在行中,您正在为而不是为frame.add(label, JLabel.BOTTOM);分配对齐选项。所以你应该使用来自的常量,而不是。frameJLabelJFrameJLabel

的常量JLabel用于对齐标签内的文本。

使用frame.add(label). 这应该足够了。

于 2013-06-20T17:31:32.237 回答