2011-11-11 5 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의 크기를 조정하고 실제로 제대로 작동하는지보고하지 못할 수도 있습니다. JFrame의 contentPane에 JScrollPane을 추가하거나 jp가 BorderLayout을 사용하게하는 것은 어떻습니까? 또한 JScrollPane의 viewportView를 설정하지 않아도됩니다. 이미 "test"를 생성자에 전달하여이 작업을 수행하고 있기 때문입니다.

+0

ScrollPane을 사용할 때 다른 JPanel을 이동하지 않으려면 ContentPane에 JScrollPane을 추가 할 수 없습니다. 또한 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