Pessoal,
Já tomei uma surra aqui do JScrollPane.
É o seguinte. Tenho dois projetos diferentes, porém nos dois quero usar o JScrollPane.
Em um dos projetos, eu exibo (add) vários JCheckBox no JPanel para que tenha rolagem. Isso funciona na boa. Veja o código:
[code]import java.awt.;
import javax.swing.;
public class MyFrame extends javax.swing.JFrame {
private JScrollPane jScrollPan = new JScrollPane();
private JPanel pan = new JPanel();
public MyFrame() {
init();
addCheckboxes();
}
private void init() {
pan.setLayout(new VerticalFlowLayout());
jScrollPan.setBounds(0, 0, 300, 100);
jScrollPan.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPan.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPan.setBorder(BorderFactory.createLineBorder(Color.black, 1));
jScrollPan.setViewportView(pan);
getContentPane().add(jScrollPan);
pack();
setSize(320,300);
}
private void addCheckboxes() {
int i=0;
for(; i<20; i++) {
JCheckBox j = new JCheckBox("CheckBox"+i);
pan.add( j );
}
pan.setBounds(new Rectangle(0, 0, 280, (++i)*22));
pan.repaint();
}
public static void main(String[] args) {
MyFrame m = new MyFrame();
m.show();
}
}[/code]
No outro projeto, eu tento fazer quase a mesma coisa, porém, criei uma classe que estende um JPanel, que dentro contém alguns objetos, e tento adicionar vários MyJPanel para ter o mesmo resultado do projeto anterior, mas não funciona.
Veja o código:
[code]import java.awt.;
import javax.swing.;
public class MyFrame2 extends javax.swing.JFrame {
private JScrollPane jScrollPan = new JScrollPane();
private JPanel pan = new JPanel();
public MyFrame2() {
init();
addMyJPanels();
}
private void init() {
pan.setLayout(new VerticalFlowLayout());
jScrollPan.setBounds(0, 0, 300, 100);
jScrollPan.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPan.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPan.setBorder(BorderFactory.createLineBorder(Color.black, 1));
//jScrollPan.getViewport().setLayout(null);
jScrollPan.setViewportView(pan);
getContentPane().add(jScrollPan);
pack();
setSize(320,300);
}
private void addMyJPanels() {
int i=0;
for(; i<20; i++) {
MyJPanel j = new MyJPanel();
pan.add( j );
}
pan.setBounds(new Rectangle(0, 0, 280, (++i)*22));
pan.repaint();
}
public static void main(String[] args) {
MyFrame2 m = new MyFrame2();
m.show();
}
}[/code]
E o meu JPanel que criei:
[code]import java.awt.;
import javax.swing.;
import javax.swing.border.LineBorder;
public class MyJPanel extends javax.swing.JPanel {
private JTextField t1 = new JTextField();
private JTextField t2 = new JTextField();
private JTextField t3 = new JTextField();
public MyJPanel() {
init();
}
private void init() {
setSize(306,22);
setLayout(null);
setBorder(new LineBorder(new Color(0, 0, 0)));
t1.setBounds(1,1,100,20);
t2.setBounds(103,1,100,20);
t3.setBounds(205,1,100,20);
add(t1);
add(t2);
add(t3);
}
public static void main(String[] args) {
JFrame m = new JFrame();
m.getContentPane().setLayout(null);
m.getContentPane().add(new MyJPanel());
m.setSize(310,50);
m.show();
}
}[/code]
Alguém alguma idéia porque isso não dá certo quando eu adiciono um JPanel ao invés de outro componente?
A classe VerticalFlowLayout eu achei na internet. Para pegar o arquivo, clique aqui.
Valeu!