2011-11-11 8 views
1

私は複数のObject(カスタムクラスはJpanelを拡張)オブジェクトを持つJPanelを持っています。 JPanelには、7行1列のグリッドレイアウトがあります。私は7つのオブジェクトを持つJPanelを別のJScrollPaneに追加しようとしているので、すべてのオブジェクトを表示するためにスクロールすることができますが、それは奇妙なことです。 JPanelにいくつのオブジェクトが入っていても、スクロールバーは表示されません。何か案は?前もって感謝します。Java ScrollPane/JPanel

import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.GridLayout; 

    import javax.swing.BorderFactory; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.JScrollBar; 
    import javax.swing.JScrollPane; 
    import javax.swing.ScrollPaneLayout;  

    public class Main { 
    @SuppressWarnings("deprecation") 
    public static void main(String[] args) { 
      JFrame frame = new JFrame("Test"); 
      frame.setLayout(new BorderLayout()); 

      JLabel title = new JLabel("Game", JLabel.CENTER); 
      title.setPreferredSize(new Dimension(60,60)); 
      title.setBorder(BorderFactory.createLineBorder(Color.black,5)); 
      frame.add(title,BorderLayout.NORTH); 

      frame.setSize(850,480); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      Grid g = new Grid(); 

      JPanel jp = new JPanel(); 
      jp.setLayout(new GridLayout(1,3)); 
      jp.add(g); 

      JPanel test = new JPanel();   


      test.setLayout(new GridLayout(7,1)); 

      test.add(p1); 
      test.add(p2); 
      test.add(p3); 
      test.add(p4); 
      test.add(p5); 
      test.add(p6); 
      test.add(p7); 
      JScrollPane jsp = new JScrollPane(test); 
      jsp.setViewportView(test); 
      jsp.getVerticalScrollBar().setUnitIncrement(50); 
      jsp.setCorn 
      jsp.setVerticalScrollBarPolicy(22);    

      jp.add(jsp,BorderLayout.EAST);  

      frame.add(jp); 
      frame.setLocationRelativeTo(null); 
      frame.setVisible(true); 
      }  
     } 

答えて

2

JP JPanelのはJPanelのデフォルトのFlowLayoutのを使用し、これはあなたにJScrollPaneのサイズを変更し、それが実際に正常に動作していることを見てからあなたを防ぐことがあります。なぜJScrollPaneをJFrameのcontentPaneに追加するのか、jpにBorderLayoutを使用させるのでしょうか?また、JScrollPaneのviewportViewを、すでに "test"をそのコンストラクタに渡すことで設定している必要はありません。

+0

ScrollPaneを使用したときに他のJPanelを移動させたくないため、JScrollPaneをContentPaneに追加できません。また、ScrollPaneが機能しているかもしれませんが、私が追加するオブジェクトが垂直に積み重ねられる必要があります。ビューポートヘルプに感謝します。アイデア? –

+0

ビューポートビューがスクロールペインのビューポートよりも大きい場合、スクロールバーが表示されます。 –

+0

バーを表示させるためにオブジェクトを追加しようとしましたが、表示されませんでした –

1

コードはコンパイルされません。次のコードを見てください。それは垂直方向と水平方向にスクロールすることができます。

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

class MyPanel extends JPanel { 
    MyPanel(Color c) { 
     setBackground(c); 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
     JPanel panel = new JPanel(); 
     // the size of this panel is larger than the frame 
     panel.setPreferredSize(new Dimension(500, 2000)); 
     panel.setLayout(new GridLayout(7, 1)); 
     // add 7 sub panels 
     panel.add(new MyPanel(Color.magenta)); 
     panel.add(new MyPanel(Color.cyan)); 
     panel.add(new MyPanel(Color.blue)); 
     panel.add(new MyPanel(Color.green)); 
     panel.add(new MyPanel(Color.yellow)); 
     panel.add(new MyPanel(Color.orange)); 
     panel.add(new MyPanel(Color.red)); 

     JScrollPane scroll = new JScrollPane(panel); 
     scroll.setViewportView(panel); 
     scroll.getVerticalScrollBar().setUnitIncrement(50); 

     JFrame frame = new JFrame("Test"); 
     frame.setSize(400, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(scroll); 
     frame.setVisible(true); 
    } 
} 
+0

あなたは素晴らしいです.......本当に素晴らしい..... .....私のコードは完全に今働いています....私のコードはコンパイルされていました.....しかし私が作った間違いは、私のすべてのコンポーネントをフレームに..... .....助けてくれてありがとう。 –

+0

スクロールペインの各コンポーネントにmouselistenerを追加するにはどうすればよいですか? –

+0

'panel.add(new MyPanel(Color.magenta));'の代わりに、 'MyPanel mp = new MyPanel(Color.magenta);を書きました。 mp.addMouseListener(...); panel.add(mp); ' – wannik

関連する問題