2010-09-24 9 views
0

J'ai un JFrame qui contient un JPanel. Le cadre peut être redimensionné par l'utilisateur à l'aide de la souris. Lorsque la largeur de la trame est> 400, la largeur de l'intérieur du jpanel est fixée à 10; sinon 1080.redimensionner le panneau enfant lors du redimensionnement du parent JFrame

entre le cadre et le panneau, il y a aussi un JScrollBar.

Voici mon code:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.event.ComponentEvent; 
import javax.swing.*; 
import javax.swing.table.*; 
/** 
* 
* @author Administrator 
*/ 
public class TableFrame extends javax.swing.JFrame { 
public JScrollPane jScrollPane1 = new JScrollPane(); 
public JTable table; 
public JScrollPane getScrollPane(){ 
    return this.jScrollPane1; 
} 

JPanel inFrame = new JPanel(); 
public TableFrame() { 
    initComponents(); 

    jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    //this.jScrollPane1.setViewportView(inFrame); 
    this.getContentPane().setLayout(new BorderLayout()); 
    this.addComponentListener(new java.awt.event.ComponentAdapter() { 
     public void componentResized(ComponentEvent e) { 
        setSize(); 
      } 
    }); 
    this.getContentPane().add(this.jScrollPane1); 

    this.jScrollPane1.setViewportView(this.inFrame); 

} 

public void setSize(){ 
    int w = this.getWidth(); 
    int width = 0; 
    int height = 1000; 
    if(w < 400){ 
     width = 10; 
     this.inFrame.setBackground(Color.blue); 
    }else{ 
     width = 1080; 
     this.inFrame.setBackground(Color.red); 
    } 
    this.inFrame.setPreferredSize(new Dimension(width, height)); 
    this.jScrollPane1.revalidate(); 
} 

/** This method is called from within the constructor to 
* initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is 
* always regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code"> 
private void initComponents() { 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 400, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 300, Short.MAX_VALUE) 
    ); 

    pack(); 
}// </editor-fold> 

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    TableFrame frame = new TableFrame(); 

    frame.setVisible(true); 


} 

// Variables declaration - do not modify 
// End of variables declaration 

}

Cependant, la barre de défilement du JScrollPane ne fonctionne pas comme on pouvait s'y attendre. Lorsque je redimensionne la trame de largeur supérieure à 400 à inférieure à 400, la barre de défilement ne se met pas à jour correctement. Ce dont j'ai besoin, c'est que lorsque la largeur de l'image est inférieure à un seuil, le panneau doit être redimensionné à une valeur constante, sinon une autre valeur. La barre de défilement ne met pas à jour correctement la barre de défilement

Répondre

3

Vous devriez revalidationg le panneau, pas le scrollpane:

// this.jScrollPane1.revalidate(); 
this.inFrame.revalidate(); 
Questions connexes