-1

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position のエラーが発生します。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 です。それが機能する理由です。 TOPBOTTOMはそれぞれ 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 に答える