JPanelの特定のX座標とY座標に一連のJLabelを配置しようとしています(その高さと幅も設定します)。私が何をしても、各ラベルは直前のラベルのすぐ右になり、他のすべてのラベルとまったく同じサイズになります。
現在、私のJpanelはグリッドレイアウトになっています。 Absolute Layout(不正な引数の例外結果)、Free Design(ラベルが表示されない)、Flow Layout(すべてがちょうど中央に絞られる)、および他のいくつかを試しました。
この作業を行うために何をする必要があるかわかりません。誰でも助けることができますか?ありがとう!
JLabel lbl1 = new JLabel("label 1");
JLabel lbl2 = new JLabel("label 2");
JLabel lbl3 = new JLabel("label 3");
JLabel lbl4 = new JLabel("label 4");
JLabel lbl5 = new JLabel("label 5");
myPanel.add(lbl1);
myPanel.add(lbl2);
myPanel.add(lbl3);
myPanel.add(lbl4);
myPanel.add(lbl5);
lbl1.setLocation(27, 20);
lbl2.setLocation(123, 20);
lbl3.setLocation(273, 20);
lbl4.setLocation(363, 20);
lbl5.setLocation(453, 20);
lbl1.setSize(86, 14);
lbl2.setSize(140, 14);
lbl3.setSize(80, 14);
lbl4.setSize(80, 14);
lbl5.setSize(130, 14);
コンテナのレイアウトをnullに設定する必要があります。
myPanel.setLayout(null);
ただし、Matisse Layout Managerを確認することをお勧めします。現在はGroupLayoutと呼ばれています。絶対配置の主な問題は、ウィンドウのサイズが変更されたときに何が起こるかです。
setLayout(null)
を呼び出して、コンテナのレイアウトマネージャーをnullに設定します。
コンテナの各子に対してComponentクラスのsetbounds
メソッドを呼び出します。
Componentクラスのrepaintメソッドを呼び出します。
注意:
コンテナを絶対位置に配置してコンテナを作成すると、コンテナを含むウィンドウのサイズが変更された場合に問題が発生する可能性があります。
このリンクを参照してください: http://docs.Oracle.com/javase/tutorial/uiswing/layout/none.html
レイアウトマネージャは、コンテナ内のコンポーネントのレイアウトを自動的に決定するために使用されます。特定の座標位置にコンポーネントを配置する場合は、レイアウトマネージャーをまったく使用しないでください。
myPanel = new JPanel(null);
または
myPanel.setLayout(null);
私のアドバイスは、GUIエディターでIDE like NetBeans を使用することです。コードを検査するには、多くの方法があるためです。
レイアウトマネージャーの設定、またはmyPanel.setLayout(null)を行う絶対配置のために、いくつかの影響があります。
一般に、JFrameのコンストラクターで呼び出しを行うと仮定すると、pack()
を呼び出してレイアウトを開始できます。
次に、すべてのレイアウトマネージャーは、add(Component)
またはadd(Component, Constraint)
の独自の実装を使用します。 BorderLayoutの使用法は、add(label、BorderLayout.CENTER)などです。
// Best solution!!
import Java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = (JPanel) frame.getContentPane();
panel.setLayout(null);
JLabel label = new JLabel("aaa");
panel.add(label);
Dimension size = label.getPreferredSize();
label.setBounds(100, 100, size.width, size.height);
frame.setSize(300, 200);
frame.setVisible(true);
}
}