2017-02-11 23 views
0

Janeに2つのJPanelを追加しようとしていますが、1つのように見えます。私はこのイメージのように互いの上にそれらを積み重ねることを試みています。JFrameに2つのJPanelを追加します

layout image

私はレイアウトマネージャを見てする必要があるかもしれません考えて?私はちょうど正しい方向にちょっとしたナッジが必要です。 Gridbag Layoutを使用して

package projectTwo; 

import javax.swing.*; 

public class checkFrame 
{ 
    public static void main (String[] args) 
    { 
     JFrame frame = new JFrame("Compose Message"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     checkPanel bob = new checkPanel(); 
     //frame.add(bob); 
     frame.getContentPane().add(bob); 
     frame.setResizable(false); 
     frame.setSize(750, 500); 
     frame.setVisible(true); 
    } 

} 

package projectTwo; 

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 


public class checkPanel extends JPanel implements ActionListener 
{ 
    private JPanel entry, display; 
    private JLabel name, checkAmount, payOrderOf, numPrint, numWords; 
    private JTextField nameT, checkAmountT; 
    private JButton Submit; 

    public checkPanel() 
    { 
     entryComponents(); 
     checkDisplay(); 
    } 
    private void entryComponents(){ 

    name = new JLabel("Name:"); 
    checkAmount = new JLabel("Check Amount:"); 


    nameT = new JTextField(20); 
    nameT.addActionListener(this); 

    checkAmountT = new JTextField(20); 
    checkAmountT.addActionListener(this); 

    Submit = new JButton("Submit"); 
    Submit.addActionListener(this); 


    add(name); 
    add(nameT); 
    add(checkAmount); 
    add(checkAmountT); 
    add(Submit); 

    setPreferredSize(new Dimension(750, 75)); 
    setBackground(new Color(200,200,200)); 
} 

private void checkDisplay(){ 
    payOrderOf = new JLabel("Pay to the Order of: "); 


    add(payOrderOf); 

    setBackground(new Color(220,255,225)); 
} 

public void actionPerformed (ActionEvent event) 
    { 

    } 
} 
+1

"正しい方向にちょっとしたナッジが必要です。*"開始するには良い場所:https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html – user1803551

答えて

0

をパネル間の区切りを置く多くのを助けることができます。現時点では、JPanelをどこに置くべきかについての指定なしに、単にJPanelを互いに追加しています。

この場合、いくつかの選択肢があります。 GridLayoutを使うことができますが、それはすべてのパネルが同じサイズになることにつながります。お互いの下に2つのパネルが必要な場合は、BorderLayoutを使用することをお勧めします。

public class checkPanel extends JPanel implements ActionListener 
{ 
private JPanel entry, display; 
private JLabel name, checkAmount, payOrderOf, numPrint, numWords; 
private JTextField nameT, checkAmountT; 
private JButton Submit; 

public checkPanel() 
{ 
    this.setPreferredSize(new Dimension(750, 75)); 
    entryComponents(); 
    checkDisplay(); 

    this.setLayout(new BorderLayout()); 
    this.add(entry, BorderLayout.NORTH); 
    this.add(display, BorderLayout.CENTER); 
} 
private void entryComponents(){ 

    entry = new JPanel(); 
    // You should specify entry's layout as well FlowLayout are used by default 

    name = new JLabel("Name:"); 
    checkAmount = new JLabel("Check Amount:"); 


    nameT = new JTextField(20); 
    nameT.addActionListener(this); 

    checkAmountT = new JTextField(20); 
    checkAmountT.addActionListener(this); 

    Submit = new JButton("Submit"); 
    Submit.addActionListener(this); 


    entry.add(name); 
    entry.add(nameT); 
    entry.add(checkAmount); 
    entry.add(checkAmountT); 
    entry.add(Submit); 


    entry.setBackground(new Color(200,200,200)); 
} 

private void checkDisplay(){ 

    display = new JPanel(); 
    // You should specify display's layout as well FlowLayout are used by  default 

    payOrderOf = new JLabel("Pay to the Order of: "); 


    display.add(payOrderOf); 

    display.setBackground(new Color(220,255,225)); 
} 
@Override 
public void actionPerformed(ActionEvent arg0) { 
    // TODO Auto-generated method stub 

} 

} 

作成した各JPanelにレイアウトを割り当てるのが一般的です。レイアウトの選択は、パネルがどのように機能するかによって異なります。

+0

//エントリのレイアウトを指定する必要がありますが、FlowLayoutもデフォルトで使用されます。だから私はこのサンプルのように私のコードの外観を持っている必要がありますか? JPanel p =新しいJPanel(new BorderLayout()); –

+0

@ JamesParkerはいそうすべきです。各JPanelには、要素がパネル内にどのように配置されるかを示すレイアウトが定義されている必要があります。そして、選択されたレイアウト仕様を使用して、そのパネルに要素が追加されました。たとえば、BorderLayoutの場合、各要素の位置はpanel.add(new JLabel( '' ")、BorderLayout.CENTER)としなければなりませんが、GridLayoutでは順序はあらかじめ決められているため、単にpanel.add(label1) – TM00

+0

JPanel entry = new JPanel(new BorderLayout())でprivate void entryComponents()を実行し、このentry.add(name、BorderLayout)のようにadd sを変更しました。 .CENTER);これらをロードするにはコンストラクタで何をする必要がありますか? –

0

あなたに私はあなたが間違いなくレイアウトマネージャを見てみる必要があるだけでなく

+0

ありがとう私はそれを念頭に置いて入力します。私たちはすぐにレイアウトを学びます。 –