メインフレームにテキストフィールドとボタンを表示する簡単なコードを書いたところですが、実行した後、表示されるのはテキストフィールドだけです。
テキストフィールドの後にボタンのコードを書くと、ボタンだけが表示されます。
理由は何ですか?
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);
コンポーネントを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);
JFrame
のデフォルトのレイアウトはBorderLayout
です。このようなレイアウトでadd
のContainer
メソッドを呼び出すことは、add(..., BorderLayout.CENTER)
を呼び出すことと同じです。 BorderLayout
の各場所には、1つの要素のみを含めることができます。したがって、2つの呼び出しを行う
mainframe.add(jb);
mainframe.add(link);
最後に追加したコンポーネントを含むCENTERになります。これを回避したい場合は、別の場所に追加するか、 JFrame#setLayout
を呼び出して別のレイアウトマネージャー(たとえば、FlowLayout
)を使用できます。
また、JPanelが使用するデフォルトのレイアウトであるFlow Layoutのようなものを使用することもできます。コンポーネントを1行または1行に配置するために使用されます。たとえば、左から右または右から左:
フローレイアウトはコンポーネントを一列に配置し、スペースが残っていない場合、残りのすべてのコンポーネントは次の行に移動します。 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レイアウトの詳細 をチェックしてください。
JFrameのデフォルトのレイアウトマネージャーはBorderLayoutです。自動レイアウトが必要な場合は、FlowLayoutを使用できます。
mainframe.setLayout(new FlowLayout());
SetBounds()メソッドで座標を指定する場合は、JFrameでのレイアウトマネージャーの設定をキャンセルする必要があります。
mainframe.setLayout(null);
jb.setBounds(10,10,100,50);
link.setBounds(10,70,180,100);
borderLayout Documentation mainframe.add(jb);が表示された場合。 mainframe.add(jb、BorderLayout.CENTER);と同じです。 mainframe.add(link); mainframe.add(jb、BorderLayout.CENTER);と同じです。
最後のものだけを表示します