Foro sobre Java SE > Ayuda JScrollPane
Buenas,
Que me corrijan los expertos en swing si me equivoco, pero yo creo que basta con que el contentpanel de tu frame sea un JScrollPane:
http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html
Un saludo
Exactamente es así, UnoPorAhi. Sigue un test ejecutable que muestra cómo resolverlo.
En el test he asignado la política de barras del ScrollPane como siempre visibles, para que se vean.
En ese JPanel interno irán los componentes necesarios para la aplicación.
public class Test extends javax.swing.JFrame {
public Test() {
initComponents();
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
final JPanel panel = new JPanel();
jInternalFrame1.setContentPane(scrollPane);
scrollPane.setViewportView(panel);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jInternalFrame1 = new javax.swing.JInternalFrame();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jInternalFrame1.setVisible(true);
javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout(jInternalFrame1.getContentPane());
jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout);
jInternalFrame1Layout.setHorizontalGroup(
jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 391, Short.MAX_VALUE)
);
jInternalFrame1Layout.setVerticalGroup(
jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 265, Short.MAX_VALUE)
);
getContentPane().add(jInternalFrame1, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JInternalFrame jInternalFrame1;
// End of variables declaration
}
Muchas gracias por las respuestas me sirvieron mucho :) y perdonen la pregunta tan obvia pero a veces las cosas no fluyen xD ya me aclare y pude seguir con el proyecto
No hay preguntas obvias cuando uno está atascado ;D
Q pena volver a molestar pero el scroll no me funciono aparecieron las barras pero no funcionan no lo habia podido probar en forma. DEjo copia de la calse del JInternalFrame
package DIGASCOL;
import java.awt.Color;
import java.awt.Font;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.table.DefaultTableModel;
/**
*
* @author GUSTAVO
*/
public class frmMovimiento_cilindro extends JInternalFrame implements ActionListener, KeyListener, FocusListener{
private String cod;
private Font botones= new Font("Arial",Font.BOLD,8);
private String[][] detalle;
private JScrollPane contenedor;
private JPanel contenedor_deposito;
private JTable registros;
private int contFilas=0;
private Double subtotal=0.0,total=0.0;
private JTextField tobservacion,ttipo_movimiento,tconsecutivo,tcod_tercero,ttotal,tfecha_entrega1,tfecha_entrega2,tfecha_entrega3,tfecha_vencimiento1,tfecha_vencimiento2,tfecha_vencimiento3,tcod_empleado,treciboCaja,tdeposito,tnum_cilindro,tvalor;
private Label lreciboCaja,lacantidad,lconsecutivo,lcod_tercero,ltotal,lfecha_entrega,lfecha_devolucion,ldeposito,lempleado,lobservacion,lfecha_vencimiento,lvalor,lnum_cilindroltipo_movimiento;
private JComboBox cbDescripcion;
private DefaultTableModel datos;
private String[] vDatos= new String[6];
private String consecutivo,cod_tercero,cod_deposito,cod_empleado,fecha_entrega,fecha_vencimiento,fecha_devolucion,cantidad;
private JButton blimpiar,blistar,bingresar,bconsultar,bactualizar,bborrar,batras,bregistros,bsubtotalizar,btotalizar;
bdMovimiento_cilindro bd1=new bdMovimiento_cilindro();
private JPanel panel=new JPanel();
private JScrollPane scroll=new JScrollPane(panel);
public frmMovimiento_cilindro(int tipU){
super("Movimiento_cilindros",true,true,true,true);
setLayout(null);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.setContentPane(scroll);
panel.setSize(900, 900);
panel.setLayout(null);
//BOTONES
bconsultar=new JButton();
bconsultar.setBounds(10, 800,45, 45);
bconsultar.setIcon(new ImageIcon(getClass().getResource("iconos/consulta.gif")));
System.out.print(bconsultar.getPreferredSize());
panel.add(bconsultar);
bactualizar=new JButton();
//System.out.print(bactualizar.getPreferredSize());
bactualizar.setIcon(new ImageIcon(getClass().getResource("iconos/actualizar.gif")));
bactualizar.setBounds(60, 400, 45, 45);
panel.add(bactualizar);
bingresar=new JButton();
bingresar.setBounds(110,400, 45, 45);
bingresar.setIcon(new ImageIcon(getClass().getResource("iconos/ingresar.gif")));
panel.add(bingresar);
bborrar=new JButton();
bborrar.setBounds(160, 400, 45, 45);
bborrar.setIcon(new ImageIcon(getClass().getResource("iconos/borrar.gif")));
panel.add(bborrar);
batras=new JButton();
//System.out.print(batras.getPreferredSize());
batras.setBounds(260, 400,45, 45);
batras.setIcon(new ImageIcon(getClass().getResource("iconos/cerrar.gif")));
panel.add(batras);
bregistros=new JButton("...");
bregistros.setBounds(870, 180, 20, 20);
panel.add(bregistros);
//botones.deriveFont(8);
blimpiar=new JButton("Limpiar");
blimpiar.setFont(botones);
blimpiar.setBounds(810, 150, 80, 25);
panel.add(blimpiar);
blistar=new JButton();
blistar.setIcon(new ImageIcon(getClass().getResource("iconos/detalle.gif")));
blistar.setBounds(210, 400, 45, 45);
panel.add(blistar);
btotalizar=new JButton();
btotalizar.setBackground(Color.BLUE);
btotalizar.setBounds(540, 420, 15, 15);
panel.add(btotalizar);
blimpiar.addActionListener(this);
btotalizar.addActionListener(this);
blistar.addActionListener(this);
bconsultar.addActionListener(this);
bingresar.addActionListener(this);
batras.addActionListener(this);
bborrar.addActionListener(this);
bactualizar.addActionListener(this);
bregistros.addActionListener(this);
bregistros.addKeyListener(this);
switch (tipU){
case 1:
Activar(true,true,true,true,true);
break;
case 2:
Activar(true,true,true,true,true);
case 3:
Activar(true,true,false,false,false);
}
//TABLA DE REGISTROS
datos=new DefaultTableModel();
datos.addColumn("cod Movimiento");
datos.addColumn("Tipo Movimiento");
datos.addColumn("Cilindro");
datos.addColumn("Tipo_gas");
datos.addColumn("Valor");
datos.addColumn("Observacion");
registros=new JTable(datos);
contenedor=new JScrollPane(registros);
contenedor.setBounds(20, 200, 600, 200);
panel.add(contenedor);
//CAMPOS DE TEXTO Y COMBOBOX PARA EL JTABLE
ttipo_movimiento=new JTextField();
ttipo_movimiento.setBounds(20, 180, 30, 20);
ttipo_movimiento.setText("0");
panel.add(ttipo_movimiento);
cbDescripcion=new JComboBox();
cbDescripcion.setBounds(52, 180, 250, 20);
panel.add(cbDescripcion);
cbDescripcion.addActionListener(this);
String[] Productos=bd1.getDescripcion().split("&");
for(int y=0;y<Productos.length;y++){
cbDescripcion.addItem(Productos[y]);
}
tnum_cilindro=new JTextField();
tnum_cilindro.setBounds(304, 180, 80, 20);
panel.add(tnum_cilindro);
tnum_cilindro.setText("0");
tnum_cilindro.addFocusListener(this);
tvalor=new JTextField();
tvalor.setBounds(386, 180, 90, 20);
panel.add(tvalor);
tvalor.addKeyListener(this);
tvalor.addActionListener(this);
tvalor.addFocusListener(this);
tvalor.setText("0");
tobservacion=new JTextField();
tobservacion.setBounds(476, 180, 80, 20);
panel.add(tobservacion);
tobservacion.addKeyListener(this);
tobservacion.addActionListener(this);
tobservacion.addFocusListener(this);
tobservacion.setText("");
//ETIQUETAS
lconsecutivo=new Label("Consecutivo");
lconsecutivo.setBounds(10, 10, 110, 20);
panel.add(lconsecutivo);
lcod_tercero=new Label("Tercero");
lcod_tercero.setBounds(10, 50, 110, 20);
panel.add(lcod_tercero);
lfecha_entrega=new Label("Fecha Entrega");
lfecha_entrega.setBounds(10, 90, 110, 20);
panel.add(lfecha_entrega);
lfecha_vencimiento=new Label("Fecha Vencimiento");
lfecha_vencimiento.setBounds(10, 110, 110, 20);
panel.add(lfecha_vencimiento);
lvalor=new Label("Valor");
lvalor.setBounds(386, 160, 120, 20);
panel.add(lvalor);
lvalor=new Label("Num_cilindro");
lvalor.setBounds(304, 160, 120, 20);
panel.add(lvalor);
lvalor=new Label("Tipo_movimiento");
lvalor.setBounds(60, 160, 160, 20);
panel.add(lvalor);
ldeposito=new Label("Deposito");
ldeposito.setBounds(10, 70, 100, 18);
panel.add(ldeposito);
lempleado=new Label("Cod Empleado");
lempleado.setBounds(10, 30, 100, 18);
panel.add(lempleado);
ltotal=new Label("Total");
ltotal.setBounds(350, 420, 50, 20);
panel.add(ltotal);
//CAMPOS DE TEXTO
tconsecutivo=new JTextField();
tconsecutivo.setBounds(115, 10, 150, 20);
panel.add(tconsecutivo);
tconsecutivo.addFocusListener(this);
tcod_empleado=new JTextField();
tcod_empleado.setBounds(115, 30, 150, 20);
panel.add(tcod_empleado);
tcod_empleado.addFocusListener(this);
tcod_tercero=new JTextField();
tcod_tercero.setBounds(115, 50, 150, 20);
panel.add(tcod_tercero);
tcod_tercero.addFocusListener(this);
tdeposito=new JTextField();
tdeposito.setBounds(115, 70, 150, 20);
panel.add(tdeposito);
tdeposito.addFocusListener(this);
tfecha_entrega1=new JTextField();
tfecha_entrega2=new JTextField();
tfecha_entrega3=new JTextField();
tfecha_entrega1.setBounds(120, 90, 50, 20);
tfecha_entrega2.setBounds(170, 90, 50, 20);
tfecha_entrega3.setBounds(220, 90, 100, 20);
tfecha_entrega1.setText("DD");
tfecha_entrega2.setText("MM");
tfecha_entrega3.setText("AAAA");
panel.add(tfecha_entrega1);
panel.add(tfecha_entrega2);
panel.add(tfecha_entrega3);
tfecha_entrega1.addFocusListener(this);
tfecha_entrega2.addFocusListener(this);
tfecha_entrega3.addFocusListener(this);
tfecha_vencimiento1=new JTextField();
tfecha_vencimiento2=new JTextField();
tfecha_vencimiento3=new JTextField();
tfecha_vencimiento1.setBounds(120, 110, 50, 20);
tfecha_vencimiento2.setBounds(170, 110, 50, 20);
tfecha_vencimiento3.setBounds(220, 110, 100, 20);
tfecha_vencimiento1.setText("DD");
tfecha_vencimiento2.setText("MM");
tfecha_vencimiento3.setText("AAAA");
panel.add(tfecha_vencimiento1);
panel.add(tfecha_vencimiento2);
panel.add(tfecha_vencimiento3);
tfecha_vencimiento1.addFocusListener(this);
tfecha_vencimiento2.addFocusListener(this);
tfecha_vencimiento3.addFocusListener(this);
ttotal=new JTextField();
ttotal.setBounds(440, 420, 100, 20);
panel.add(ttotal);
}
public void Activar(Boolean a,Boolean b,Boolean c,Boolean d,Boolean e){
bconsultar.setEnabled(a);
blistar.setEnabled(false);
bactualizar.setEnabled(false);
bingresar.setEnabled(d);
bborrar.setEnabled(false);
}
public void actionPerformed(ActionEvent e){
//LIMPIAR
if(e.getSource()==blimpiar)datos.setRowCount(0);
//ATRAS
if(e.getSource()==batras){
this.dispose();
}
//INGRESAR
if(e.getSource()==bingresar){
cod=tconsecutivo.getText();
if(cod==null||cod.equals("")){
JOptionPane.showMessageDialog(null, "Debe ingresar un codigo", "Error", 1);
}
else{
detalle=new String[contFilas][4];
for(int x=0;x<contFilas;x++){
detalle[x][0]=String.valueOf(datos.getValueAt(x, 2));
detalle[x][1]=String.valueOf(datos.getValueAt(x, 0));
detalle[x][2]=String.valueOf(datos.getValueAt(x, 3));
detalle[x][3]=String.valueOf(datos.getValueAt(x, 5));
}
Totalizar();
consecutivo=tconsecutivo.getText();
fecha_entrega=tfecha_entrega3.getText()+"-"+tfecha_entrega2.getText()+"-"+tfecha_entrega1.getText();
fecha_vencimiento=tfecha_vencimiento3.getText()+"-"+tfecha_vencimiento2.getText()+"-"+tfecha_vencimiento1.getText();
if(fecha_entrega.contains("A")||fecha_entrega.contains("M")||fecha_entrega.contains("D"))
fecha_entrega="null";
if(fecha_vencimiento.contains("A")||fecha_vencimiento.contains("M")||fecha_vencimiento.contains("D"))
fecha_vencimiento="null";
cod_empleado=tcod_empleado.getText();
cod_tercero=tcod_tercero.getText();
cantidad=tdeposito.getText();
//bd1.insertar(detalle, consecutivo, cod_tercero, String.valueOf(total),fecha_entrega,fecha_vencimiento,cantidad,cod_empleado, contFilas);
}
}
if(e.getSource()==bregistros){
addRegistro();
}
//COMBO BOX PRODUCTOS
if(e.getSource()==cbDescripcion){
String descripcion=cbDescripcion.getSelectedItem().toString();
ttipo_movimiento.setText(bd1.getCDescripcion(descripcion));
}
//Subtotalizar y Totalizar
if(e.getSource()==btotalizar){
Totalizar();
}
//CONSULTAR
if(e.getSource()==bconsultar){
//try{
consultar();
//}catch(Exception e2){
// Limpiar();
//}
}
//BORRAR
if(e.getSource()==bborrar){
bd1.borrar(tconsecutivo.getText());
}
}
public void addRegistro(){
if(bd1.VerificarDisponibilidad(tnum_cilindro.getText())){
double valor=Double.parseDouble(tvalor.getText());//antes de pasar los datos al Jtable
tvalor.setText(String.valueOf(valor));
vDatos[0]=ttipo_movimiento.getText();
vDatos[1]=cbDescripcion.getSelectedItem().toString();
vDatos[2]=tnum_cilindro.getText();
vDatos[3]=bd1.getTipoGas(tnum_cilindro.getText());
vDatos[4]=tvalor.getText();
vDatos[5]=tobservacion.getText();
datos.addRow(vDatos);
contFilas=contFilas+1;
ttipo_movimiento.setText("1");
cbDescripcion.setSelectedIndex(0);
tnum_cilindro.setText("0");
tvalor.setText("0");
tobservacion.setText("");
if(vDatos[0].equals("5")){
String num=JOptionPane.showInputDialog("Ingrese el número del cilindro que entro en cambio");
ttipo_movimiento.setText("6");
cbDescripcion.setSelectedIndex(5);
tnum_cilindro.setText(num);
tvalor.setText("0");
tobservacion.setText("");
addRegistro();
}
}else{
JOptionPane.showMessageDialog(null,"Ese cilindro no esta disponible, por favor verifique la informacion", "MOVIMIENTO",3);
tnum_cilindro.setFocusable(true);
}
}
public void Totalizar(){
total=0.0;
for(int y=0;y<contFilas;y++){
total=total+Double.parseDouble(String.valueOf(datos.getValueAt(y, 4)));
}
ttotal.setText(String.valueOf(total));
}
public void consultar(){
consecutivo=tconsecutivo.getText();
datos.setRowCount(0);
String consulta[][]=bd1.consultar(consecutivo);
tconsecutivo.setText(consulta[0][0]);
tcod_empleado.setText(consulta[1][0]);
tcod_tercero.setText(consulta[1][1]);
tdeposito.setText(consulta[1][2]);
ttotal.setText(consulta[2][0]);
fecha_entrega=consulta[0][1];
//System.out.print(fecha);
tfecha_entrega3.setText(fecha_entrega.substring(0,4));
tfecha_entrega2.setText(fecha_entrega.substring(5,7));
tfecha_entrega1.setText(fecha_entrega.substring(8,10));
fecha_vencimiento=consulta[0][2];
tfecha_vencimiento3.setText(fecha_vencimiento.substring(0,4));
tfecha_vencimiento2.setText(fecha_vencimiento.substring(5,7));
tfecha_vencimiento1.setText(fecha_vencimiento.substring(8,10));
for(int i=3;i<=Integer.parseInt(consulta[2][2])+2;i++){
String[] v=new String[5];
v[0]=consulta[i][0];
v[1]=bd1.getNdescripcion(consulta[i][0]);
v[2]=consulta[i][1];
v[3]=bd1.getTipoGas(consulta[i][1]);
v[4]=consulta[i][2];
v[5]=consulta[i][3];
datos.addRow(v);
}
}
public void Limpiar(){
datos.setRowCount(0);
tfecha_vencimiento1.setText("DD");
tfecha_vencimiento2.setText("MM");
tfecha_vencimiento3.setText("AAAA");
tfecha_entrega1.setText("DD");
tfecha_entrega2.setText("MM");
tfecha_entrega3.setText("AAAA");
tconsecutivo.setText("");
tcod_empleado.setText("");
tcod_tercero.setText("");
tobservacion.setText("");
ttotal.setText("");
tdeposito.setText("");
tvalor.setText("");
}
public static void main(String[] ar){
int tipU=0;
frmFactura f1=new frmFactura(tipU);
f1.setVisible(true);
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
/* if(tvaloru.hasFocus() && e.getKeyCode()==17){//17=Ctrl permite hallar el valor de la compra
double valor=0;
valor=Double.parseDouble(tcantidad.getText())*Double.parseDouble(tvaloru.getText());//antes de pasar los datos al Jtable
tvalor.setText(String.valueOf(valor));
//System.out.print("Code Tecla Ctrl:"+e.getKeyCode());
}
*/if(tvalor.hasFocus() && e.getKeyCode()==KeyEvent.VK_ENTER){//Pasa los datos al Jtable
addRegistro();
Totalizar();
}
if(tobservacion.hasFocus() && e.getKeyCode()==KeyEvent.VK_ENTER){//Pasa los datos al Jtable
addRegistro();
Totalizar();
}
if(bregistros.hasFocus() && e.getKeyCode()==KeyEvent.VK_ENTER){
addRegistro();
Totalizar();
}
}
public void focusGained(FocusEvent e) {
if(e.getComponent()==tconsecutivo){
tconsecutivo.select(0, tconsecutivo.getText().length());
}if(e.getComponent()==tnum_cilindro){
tnum_cilindro.select(0, tnum_cilindro.getText().length());
}if(e.getComponent()==tdeposito){
tdeposito.select(0, tdeposito.getText().length());
}if(e.getComponent()==tfecha_entrega1){
tfecha_entrega1.select(0, tfecha_entrega1.getText().length());
}if(e.getComponent()==tfecha_entrega2){
tfecha_entrega2.select(0, tfecha_entrega2.getText().length());
}if(e.getComponent()==tfecha_entrega3){
tfecha_entrega3.select(0, tfecha_entrega3.getText().length());
}if(e.getComponent()==tfecha_vencimiento1){
tfecha_vencimiento1.select(0, tfecha_vencimiento1.getText().length());
}if(e.getComponent()==tfecha_vencimiento2){
tfecha_vencimiento2.select(0, tfecha_vencimiento2.getText().length());
}if(e.getComponent()==tfecha_vencimiento3){
tfecha_vencimiento3.select(0, tfecha_vencimiento3.getText().length());
}if(e.getComponent()==tcod_empleado){
tcod_empleado.select(0, tcod_empleado.getText().length());
}if(e.getComponent()==tcod_tercero){
tcod_tercero.select(0, tcod_tercero.getText().length());
}if(e.getComponent()==tvalor){
tvalor.select(0, tvalor.getText().length());
}
}
public void focusLost(FocusEvent e) {
}
}
No has asignado el viewport del scrollpane al panel con scroll.setViewportView(panel);
También es más lógico declarar el tamaño del panel antes de asignarlo al scroll.
Te vuelvo a copiar aquí lo esencial del código de prueba de más arriba:
final JPanel panel = new JPanel();
jInternalFrame1.setContentPane(scrollPane);
scrollPane.setViewportView(panel);
No hace falta asignar el panel al scroll con un private JScrollPane scroll=new JScrollPane(panel); como haces en tu código, sino que es esencial declarar que el viewport del scroll sea el panel.
Hola creo que es algo estupida la pregunta pero no se porq no logro dar con la solucion :( tengo un JInternalFrame en el que tengo que poner gran cantidad de elementos y no me caben en pantalla, el problema es simple necesito añadir las barras de desplazamiento pero no logro dar con la forma.
de antemano gracias