web-dev-qa-db-ja.com

Java SwingJFrameレイアウト

メインフレームにテキストフィールドとボタンを表示する簡単なコードを書いたところですが、実行した後、表示されるのはテキストフィールドだけです。

テキストフィールドの後にボタンのコードを書くと、ボタンだけが表示されます。

理由は何ですか?

    JFrame mainframe=new JFrame();
    mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainframe.setBounds(0,0,200,200);
    JButton jb=new JButton();
    jb.setText("Leech");
    mainframe.add(jb);
    JTextField link=new JTextField(50);
    mainframe.add(link);
    mainframe.pack();
    mainframe.setVisible(true);
11
DanMatlin

コンポーネントをJPanelに追加してから、そのパネルをJFrameのContentPaneに追加します。

JFrame window = new JFrame();
JPanel mainframe = new JPanel();

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setBounds(0,0,200,200);

JButton jb = new JButton();
jb.setText("Leech");

mainframe.add(jb);

JTextField link = new JTextField(50);
mainframe.add(link);

window.getContentPane().add(mainframe);
window.pack();
window.setVisible(true);
5
Ibrahim

JFrameのデフォルトのレイアウトはBorderLayoutです。このようなレイアウトでaddContainerメソッドを呼び出すことは、add(..., BorderLayout.CENTER)を呼び出すことと同じです。 BorderLayoutの各場所には、1つの要素のみを含めることができます。したがって、2つの呼び出しを行う

mainframe.add(jb);
mainframe.add(link);

最後に追加したコンポーネントを含むCENTERになります。これを回避したい場合は、別の場所に追加するか、 JFrame#setLayout を呼び出して別のレイアウトマネージャー(たとえば、FlowLayout)を使用できます。

11
Robin

また、JPanelが使用するデフォルトのレイアウトであるFlow Layoutのようなものを使用することもできます。コンポーネントを1行または1行に配置するために使用されます。たとえば、左から右または右から左:

enter image description here

フローレイアウトはコンポーネントを一列に配置し、スペースが残っていない場合、残りのすべてのコンポーネントは次の行に移動します。 Alignプロパティは、コンポーネントの配置を左、右、中央などに決定します。

これを使用するには、JFrame.setLayout(layout)を使用してJFrameレイアウトを設定し、フローレイアウトをパラメーターとして渡す必要があります。

次の例は、フローレイアウトに配置されたコンポーネントを示しています。

package example.com;

import Java.awt.BorderLayout;
import Java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class FlowLayoutExample {

    FlowLayoutExample(){
        JFrame frame = new JFrame("Flow Layout");
        JButton button, button1, button2, button3, button4;
        button = new JButton("button 1");
        button1 = new JButton("button 2");
        button2 = new JButton("button 3");
        button3 = new JButton("button 4");
        button4 = new JButton("button 5");
        frame.add(button);
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
        frame.add(button4);
        frame.setLayout(new FlowLayout());
        frame.setSize(300,300);  
        frame.setVisible(true);  

    }
    public static void main(String[] args) {
        new FlowLayoutExample();
    }
}

JFrameレイアウトの詳細 をチェックしてください。

0
Johnny

JFrameのデフォルトのレイアウトマネージャーはBorderLayoutです。自動レイアウトが必要な場合は、FlowLayoutを使用できます。

mainframe.setLayout(new FlowLayout());

SetBounds()メソッドで座標を指定する場合は、JFrameでのレイアウトマネージャーの設定をキャンセルする必要があります。

mainframe.setLayout(null);
jb.setBounds(10,10,100,50);
link.setBounds(10,70,180,100);
0
guest

borderLayout Documentation mainframe.add(jb);が表示された場合。 mainframe.add(jb、BorderLayout.CENTER);と同じです。 mainframe.add(link); mainframe.add(jb、BorderLayout.CENTER);と同じです。

最後のものだけを表示します

0
John Dadi Leop