2017-09-12 6 views
0

Javaコードを作成したいのですが、必要なだけ多くのパネルを挿入できます。私がパネルを見るために下にスクロールすることができるように。私は今のところ今のところだ: しかし、私の問題は、私は下にスクロールすることはできません。 JTextAreasを使ってJScrollPaneをテストしましたが、うまくいきました。Java JScrollPane ve

あなたはFlowLayoutのを過剰に使用している
package test; 

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

public class Scrollbar { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     JPanel panel1 = new JPanel(); 
     JPanel panel2 = new JPanel(); 
     JPanel panel3 = new JPanel(); 
     JTextField tFId = new JTextField("ID: ", 5); 
     JTextField tFName = new JTextField("Name: ", 5); 
     JTextField tFHersteller = new JTextField("Hersteller: ", 5); 
     JTextField tFId2 = new JTextField("ID: ", 5); 
     JTextField tFName2 = new JTextField("Name: ", 5); 
     JTextField tFHersteller2 = new JTextField("Hersteller: ", 5); 
     JTextField tFId3 = new JTextField("ID: ", 5); 
     JTextField tFName3 = new JTextField("Name: ", 5); 
     JTextField tFHersteller3 = new JTextField("Hersteller: ", 5); 

     frame.setSize(400, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout()); 

     panel.setLayout(new FlowLayout()); 
     panel.setPreferredSize(new Dimension(200, 85)); 
     panel.add(panel1); 
     panel.add(panel2); 
     panel.add(panel3); 
     JScrollPane scrollPanel = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

     panel1.setLayout(new FlowLayout()); 
     panel1.add(tFId); 
     panel1.add(tFName); 
     panel1.add(tFHersteller); 

     panel2.setLayout(new FlowLayout()); 
     panel2.add(tFId2); 
     panel2.add(tFName2); 
     panel2.add(tFHersteller2); 

     panel3.setLayout(new FlowLayout()); 
     panel3.add(tFId3); 
     panel3.add(tFName3); 
     panel3.add(tFHersteller3); 

     frame.add(scrollPanel); 
     frame.setVisible(true); 
    } 
} 

答えて

0

Picture of my Program

異なるレイアウトには異なる動作があります。まず、次の行を削除する必要があります。

frame.setLayout(new FlowLayout()); 

フレームのコンテンツペインのデフォルトレイアウトはBorderLayoutです。制約を持たないBorderLayoutに追加されたコンポーネントは中央に配置されるため、スペース全体を満たすために伸びます。

第二には、あなたがこれらを削除する:推奨サイズを設定

panel.setLayout(new FlowLayout()); 
panel.setPreferredSize(new Dimension(200, 85)); 

は、そのビューを(つまり、panelである)を管理するためにJScrollPaneの能力を妨げます。コンポーネントを複数の行に表示させたい場合は、幅を制限してFlowLayoutに強制的に適用させてください。むしろ、異なる行にコンポーネントを配置するように設計されたレイアウトを使用します。最良の選択はGridBagLayoutです:

panel.setLayout(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(); 
gbc.gridwidth = GridBagConstraints.REMAINDER; 
panel.add(panel1, gbc); 
panel.add(panel2, gbc); 
gbc.weighty = 1; 
gbc.anchor = GridBagConstraints.NORTH; 
panel.add(panel3, gbc); 

制約でGridBagConstraints.REMAINDERを設定の使用は、子コンポーネントは、行全体を取る作るためのGridBagLayoutを教えてくれます。

weighty = 1を使用すると、GridBagLayoutは、追加しようとしている子のグリッドセルが、そのパネルがその子よりも大きい場合に、追加の垂直スペースをすべて占めるように指示します。最後に、GridBagConstraints.NORTHはグリッドセルの高さにかかわらず、その子をその伸ばしたグリッドセルの上部に配置します。