4

Jlabelの場所を設定するときに問題が発生しました。
コンテンツペインをいくつかのJPanelに設定し、JLabelを作成して追加しようとしました。

    JLabel mainTitle = new JLabel("SomeApp");
    mainTitle.setFont(new Font("Arial",2 , 28));
    mainTitle.setBounds(0,0, 115, 130);
    getContentPane().add(mainTitle);

JPanelをアプリケーションの左上隅に配置し、取得しているのは左上の「SomeApp」です(左上ではありません)。

ところで、JButtonを追加しようとしましたが、JButtonの幅、高さ、x、yを変更できません。

4

3 に答える 3

3

Swingは、レイアウトマネージャーを使用してコンポーネントを配置します。

それらを効果的に使用するには、それらがどのように機能するかを理解する必要があります。レイアウトマネージャーをnullに設定して、自分でレイアウトを行うこともできますが、毎回新しいコンポーネントを追跡し、ウィンドウが縮小したときに自分でレイアウト計算を実行する必要があるため、お勧めできません。

レイアウトマネージャーは、最初は少しわかりにくいです。

ウィンドウは次のようになります。

これと同じくらい簡単

このコードの使用:

import javax.swing.*;
import java.awt.Font;
import java.awt.FlowLayout;

class JLabelLocation  {

    public static void main( String [] args ) {

        JLabel mainTitle = new JLabel("SomeApp");
        mainTitle.setFont(new Font("Arial",2 , 28));
        //mainTitle.setBounds(0,0, 115, 130); //let the layout do the work

        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));// places at the left
        panel.add( mainTitle );

        frame.add( panel );// no need to call getContentPane
        frame.pack();
        frame.setVisible( true );

    }
}
于 2010-07-19T17:57:44.683 に答える
1

特定のウィジェットがコンテナ内のどこに配置されるかは、使用しているレイアウトマネージャーによって異なります。レイアウトマネージャーは、ウィジェットのサイズを変更して配置し、ウィジェットが適切に収まるようにする方法を決定します。明らかに、コンテンツペインのデフォルトのレイアウトでは、上部中央がJLabelを配置するのに最適な場所であると判断されました。

レイアウトマネージャーを使用せずにすべてを自分で配置したい場合(通常、これは物事をレイアウトするための最良の方法ではありません)、次のように追加します。

getContentPane().setLayout(null);
于 2010-07-19T17:41:03.447 に答える
0

レイアウトを使用すると、コンポーネントの動的なサイズ変更が可能になるため、通常はレイアウトを使用することをお勧めします。BorderLayoutを使用してこれを行う方法は次のとおりです。

this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add (new JLabel ("Main title"), BorderLayout.NORTH);

ラベルの右側に何かを追加したい場合は、独自のレイアウトで追加のパネルを作成できます。

// Create a panel at the top for the title and anything else you might need   
JPanel titlePanel = new JPanel (new BorderLayout());
titlePanel.add(new JLabel ("Main title"), BorderLayout.WEST);

// Add the title panel to the frame
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(titlePanel, BorderLayout.CENTER);

レイアウトを開始するための便利なリンクは次のとおりです。

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout/visual.html http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout /using.html

于 2010-07-19T18:11:04.740 に答える