2013-06-27 3 views
1

Я добавлю JFrame JSrollPane. ScrollPane содержит JPanels. Но у меня проблема, когда я добавляю первый JPanel в ScrollPane, я ничего не вижу, когда добавляю JPanel в JFrame. Я вижу JPanels. Итак, где я ошибаюсь? Здесь код:JScrollPane с 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 Thats работает! Но зачем добавлять работу дозатора? – Aku

+1

Вы не должны «добавлять» в scrollpane, поскольку он переопределяет область просмотра, которая просто закручивает вещи, вместо этого вы должны добавлять контент в видовое окно scrollpane – MadProgrammer

+0

@Aku, потому что вы хотите добавить компонент в область просмотра scrollpane, а не сама прокрутка. Если вы хотите, вы также можете использовать 'setViewportView (jp);' –

1

использование:

scroll.setViewportView(jp); 
2

добавить() не работает на JScrollPane. Вам нужно использовать setViewport() или передать компонент в конструктор.

JScrollPane scroll = new JScrollPane(jp); 

или

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