2013-06-27 2 views
1

JFrame에 추가 JSrollPane. ScrollPane에는 JPanels가 포함되어 있습니다. 하지만 ScrollPane에 JPanel을 처음 추가 할 때 문제가 발생합니다. JPanel을 JPanel에 추가 할 때 JPanel을 추가 할 때 아무 것도 볼 수 없습니다. 그래서 내가 실수하는 곳? 여기에 코드 :JScrollPane with JPanel 아무 것도 볼 수 없습니다.

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollBar; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 

public class AddingJPanels { 

    public static void main(String... args) { 
     JFrame jF = new JFrame(); 
     PanelMain pM = new PanelMain(); 

     Panel p = new Panel("sas"); 
     JPanel jp = makeJPanel(10); 
     p.setPreferredSize(new Dimension(600,600)); 
     JScrollPane scroll = new JScrollPane(); 
     scroll.add(jp); 
     JScrollBar verticalPane = scroll.getVerticalScrollBar(); 
     verticalPane.setValue(verticalPane.getMinimum()); 
     verticalPane.setValue(20); 
     //scroll.setPreferredSize(new Dimension(570, 300)); 
     scroll.setPreferredSize(new Dimension(400,500)); 
     pM.add(scroll); 
     //JTabbedPane tB = new JTabbedPane(); 
     //tB.addTab(":]", null, pM, "Tab 3"); 
     jF.add(jp); 
     jF.setSize(new Dimension(500,500)); 
     jF.setVisible(true); 
    } 






    static JPanel makeJPanel(int i){ 
     JPanel jPl = new JPanel(); 
     jPl.setLayout(new GridLayout(i,0)); 
     JLabel lebel; 

     for(int j=0;j<i;++j){ 
      JPanel p = new JPanel(); 
      p.setLayout(new GridLayout(2,2)); 
      JButton b = new JButton("asa"); 
      p.add(b); 
      p.setBorder(BorderFactory.createLineBorder(Color.black)); 
      p.setPreferredSize(new Dimension(400,400)); 
      lebel = new JLabel("Napis: "+j); 
      p.add(lebel); 
      JTextField jTF = new JTextField("Nic",20); 
      p.add(jTF); 
      jPl.add(p); 
     } 
     return jPl; 
    } 
} 

class Frame extends JFrame { 
    public Frame() { 
     super("Frame"); 
     this.setPreferredSize(new Dimension(200, 200)); 

    } 

    public void see() { 
     this.setVisible(true); 
    } 
} 

class PanelMain extends JPanel { 
    JButton b = new JButton("press me"); 

    public PanelMain() { 
     this.add(b); 
     b.addActionListener(new ActionListener(){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       // TODO Auto-generated method stub 
       System.out.println("Pressed"); 
      } 

     }); 
    } 
} 

class Panel extends JPanel { 
    JLabel l; 

    public Panel(String s) { 
     l = new JLabel(s); 
     this.add(l); 
    } 
} 

jF.add (스크롤)을 만들면 아무 효과가 없습니다.

답변

1
JScrollPane scroll = new JScrollPane(jp); 
+0

OK 그게 작품! 하지만 왜 dosent 작업을 추가할까요? – Aku

+1

스크류 팬에 스크래치를 "추가"해서는 안된다. 스크류 팬의 뷰포트에 내용을 추가하는 대신 스크롤바의 뷰포트 – MadProgrammer

+0

@Aku에 내용을 추가해야한다. 왜냐하면 스크롤바의 뷰포트에 컴포넌트를 추가하기를 원하기 때문이다. scrollpane 자체. 원한다면'setViewportView (jp);' –

1

사용 :

scroll.setViewportView(jp); 
2

추가()이 JScrollPane의에서 작동하지 않습니다. setViewport()를 사용하거나 contructor에서 구성 요소를 전달해야합니다.

JScrollPane scroll = new JScrollPane(jp); 

또는

JScrollPane scroll = new JScrollPane(); 
scroll.setViewport(jp);