11

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);
4

6 に答える 6

16

コンテナのレイアウトをnullに設定する必要があります。

myPanel.setLayout(null);

ただし、Matisse Layout Managerも確認することをお勧めします。現在、GroupLayoutと呼ばれていると思います。絶対配置の主な問題は、ウィンドウのサイズが変更されたときに何が起こるかです。

于 2012-08-25T05:27:00.727 に答える
4
  1. を呼び出して、コンテナのレイアウトマネージャをnullに設定しますsetLayout(null)

  2. setboundsコンテナの子ごとにComponentクラスのメソッドを呼び出します。

  3. Componentクラスのrepaintメソッドを呼び出します。

ノート:

絶対に配置されたコンテナでコンテナを作成すると、コンテナを含むウィンドウのサイズが変更された場合に問題が発生する可能性があります。

このリンクを参照してください:http: //docs.oracle.com/javase/tutorial/uiswing/layout/none.html

于 2012-08-25T05:15:49.363 に答える
3

レイアウトマネージャーは、コンテナー内のコンポーネントのレイアウトを自動的に決定するために使用されます。コンポーネントを特定の座標位置に配置する場合は、レイアウトマネージャーをまったく使用しないでください。

myPanel = new JPanel(null);

また

myPanel.setLayout(null);
于 2012-08-25T05:15:07.187 に答える
2

私のアドバイスは、GUIエディタでNetBeansのようなIDEを使用することです。コードを検査し、多くの方法があるため:

レイアウトマネージャーの設定、またはmyPanel.setLayout(null)を実行する絶対配置の場合、いくつかの影響があります。

一般に、JFrameのコンストラクターで呼び出しを行うと仮定すると、呼び出しpack()てレイアウトを開始できます。

次に、すべてのレイアウトマネージャーはまたはの独自の実装を使用しadd(Component)ますadd(Component, Constraint)。BorderLayoutの使用法は、add(label、BorderLayout.CENTER)などです。

于 2012-08-25T05:19:38.847 に答える
0
    // 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);

  }
}
于 2017-03-10T03:46:27.097 に答える
-1

setSize、setLocation値を直接呼び出す独自のメソッドを使用できます。`同様に、JProgressBarの使用方法を紹介します

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class installComp{
    void install(Component comp, int w, int h, int x, int y){
        comp.setSize(w,h);
        comp.setLocation(x,y);
    }
}
class MyFrame extends JFrame{
    int cur_val = 0;
    JButton btn = new JButton("Mouse Over");
    JProgressBar progress = new JProgressBar(0,100);
    MyFrame (){
        installComp comp=new installComp();

        comp.install(btn,150,30,175,20);
        comp.install(progress,400,20,50,70);

        btn.addMouseListener(new MouseAdapter(){
            public void mouseEntered(MouseEvent evt){
                cur_val+=2;
                progress.setValue(cur_val);
                progress.setStringPainted(true);
                progress.setString(null);
            }
        }); 
        add(btn);
        add(progress);
        setLayout(null);    
        setSize(500,150); 
        setResizable(false);
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        setVisible(true);
    }
}
class Demo{
    public static void main(String args[]){
        MyFrame f1=new MyFrame();   
    }
}
于 2016-06-11T18:54:31.017 に答える