2011-10-19 8 views
1

J'ai une fenêtre horizontale qui contient un volet divisé verticalement. Lorsque la fenêtre apparaît, je veux que le volet divisé verticalement dans le haut du volet divisé horizontal soit divisé au milieu. Je veux que le diviseur horizontal soit au milieu.redimensionner le volet horizontal avec la fenêtre

J'ai cela qui fonctionne, cependant, je veux aussi le volet split horizontal pour changer sa taille lorsque la fenêtre est agrandie. (Il ne le fait pas actuellement.)

J'ai aussi une boîte de boutons sous le volet horizontal et je voudrais qu'il soit toujours visible lorsque la fenêtre est redimensionnée. Actuellement, lorsque la fenêtre se lance, je peux tout voir dans la division horizontale. Je suis incapable de voir les boutons, car ils ne correspondent pas à la taille préférée de la fenêtre (800, 600). Mais je voudrais que tout apparaisse automatiquement dans la fenêtre et reste Glue'd à la frontière de la fenêtre quand il est redimensionné ...

Comment est-ce que je peux faire ceci?

Merci!

Voici le code que j'utilise actuellement. J'appelle les méthodes create dans un contrôleur. createView est appelé en premier, puis le reste dans l'ordre séquentiel.


public void createView() { 
     dialog = new JFrame(); 
     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     dialog.setVisible(true); 
     dialog.setAlwaysOnTop(true); 
     dialog.setBounds(0, 0, 800, 600); 
     dialog.setMinimumSize(new Dimension(800, 600)); 
     dialog.setPreferredSize(new Dimension(800, 600)); 
     dialog.setResizable(true); 
     dialog.setTitle("MJLA Class Control Panel"); 

     contentPanel = new JPanel(); 
//  contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); 
     contentPanel.setLayout(new BorderLayout()); 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     dialog.getContentPane().add(contentPanel, BorderLayout.CENTER); 

     classQuizSRTSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
     contentPanel.add(classQuizSRTSplit, BorderLayout.NORTH); 

     classQuizSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
     classQuizSRTSplit.setTopComponent(classQuizSplit); 




//  classQuizHBox = Box.createHorizontalBox(); 
//  contentPanel.add(classQuizHBox); 

     sRTHBox = Box.createHorizontalBox(); 
     contentPanel.add(sRTHBox); 

     buttonBox = Box.createHorizontalBox(); 
     contentPanel.add(buttonBox, BorderLayout.SOUTH); 

     refreshButton = new JButton("Refresh"); 
     buttonBox.add(refreshButton); 

     doneButton = new JButton("Done"); 
     buttonBox.add(doneButton); 

     this.validateView(); 
    } 

public void createClassTablePanel() { 
     this.classTablePanel = new JPanel(); 
     this.classTablePanel.setBorder(BorderFactory.createLineBorder(Color.black, 3)); 
     this.classTablePanel.setPreferredSize(new Dimension(300, 300)); 
     this.classTablePanel.setLayout(new BorderLayout()); 

//  this.classQuizHBox.add(classTablePanel); 

     this.classQuizSplit.setLeftComponent(classTablePanel); 
     classTableModel = cPModel.getClassTableModel(); 

     classTable = new JTable(this.classTableModel); 

     classTable.getSelectionModel().addListSelectionListener(this); 
     JScrollPane scrollPane = new JScrollPane(classTable); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     classTablePanel.add(scrollPane, BorderLayout.CENTER); 

     this.validateView(); 
    } 

public void createQuizTablePanel() { 
     this.quizTablePanel = new JPanel(); 
     this.quizTablePanel.setBorder(BorderFactory.createLineBorder(Color.black, 3)); 
     this.quizTablePanel.setPreferredSize(new Dimension(300, 300)); 
     this.quizTablePanel.setLayout(new BorderLayout()); 

//  this.classQuizHBox.add(quizTablePanel); 

     this.classQuizSplit.setRightComponent(quizTablePanel); 

     quizTableModel = cPModel.getQuizTableModel(); 
     this.quizSorter = new TableRowSorter<DefaultTableModel>(quizTableModel); 

     quizTable = new JTable(this.quizTableModel); 
     quizTable.getSelectionModel().addListSelectionListener(this); 
     quizTable.setRowSorter(quizSorter); 
     JScrollPane scrollPane = new JScrollPane(quizTable); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     quizTablePanel.add(scrollPane, BorderLayout.CENTER); 

     Box buttonHBox = Box.createHorizontalBox(); 
     quizTablePanel.add(buttonHBox, BorderLayout.SOUTH); 

     addQuizButton = new JButton("Add Quiz"); 
     buttonHBox.add(addQuizButton); 

     removeQuizButton = new JButton("Remove Quiz"); 
     buttonHBox.add(removeQuizButton); 

     editQuizButton = new JButton("Edit Quiz"); 
     buttonHBox.add(editQuizButton); 

     this.validateView(); 
    } 

public void createStudentRecordTablePanel() { 
     this.studentRecordTablePanel = new JPanel(); 
     this.studentRecordTablePanel.setBorder(BorderFactory.createLineBorder(Color.black, 3)); 
     this.studentRecordTablePanel.setLayout(new BorderLayout()); 

//  this.sRTHBox.add(studentRecordTablePanel); 

     this.classQuizSRTSplit.setBottomComponent(studentRecordTablePanel); 

     this.studentRecordTableModel = cPModel.getStudentRecordTableModel(); 
     this.sRTSorter = new TableRowSorter<DefaultTableModel>(studentRecordTableModel); 

     sRTTable = new JTable(this.studentRecordTableModel); 
     sRTTable.setRowSorter(sRTSorter); 
     JScrollPane scrollPane = new JScrollPane(sRTTable); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     studentRecordTablePanel.add(scrollPane, BorderLayout.CENTER); 

     Box buttonHBox = Box.createHorizontalBox(); 
     studentRecordTablePanel.add(buttonHBox, BorderLayout.SOUTH); 

     editGradeButton = new JButton("Edit Grade"); 
     buttonHBox.add(editGradeButton); 

     generateReportButton = new JButton("Generate Report"); 
     buttonHBox.add(generateReportButton); 

     this.validateView(); 
    } 

Une autre question.

Cela a résolu l'un des problèmes @TrashGod. Cependant, comment puis-je faire pour que le volet horizontal scinde son composant pour qu'il corresponde à la nouvelle taille de la fenêtre, plutôt que d'être ce grand écart entre le bouton done et refresh et le bas du volet scindé horizontalement?

Je pensais que je devrais écouter un événement pour quand la taille de la fenêtre change et puis appeler la méthode pack() quand cela se produit, est-ce la seule façon ou cela fonctionnerait-il même? (Juste testé cela, cela n'a pas fonctionné ... tout remet tout à des tailles préférées.)


Apparence initiale. enter image description here


Après fenêtre maximisée. enter image description here

+1

Postez votre code SSCCE qui illustre le problème. – camickr

+0

Non, vous n'avez pas besoin d'écouter les événements et de faire un pack(). Vous devez utiliser le gestionnaire de disposition approprié. Puisque vous n'avez pas posté un SSCCE approprié, amusez-vous à faire tourner vos roues parce que nous ne sommes pas des lecteurs avisés. – camickr

Répondre

4

Vous pouvez consulter setResizeWeight(); une valeur de 0.5 doit répartir l'espace uniformément.

La méthode pack() "Cette taille Window doit être dimensionnée pour s'adapter à la taille et aux dispositions de ses sous-composants." BorderLayout.NORTH et BorderLayout.SOUTH semblent des dispositions appropriées pour rester avec le diviseur.

Pour obtenir une aide supplémentaire, veuillez indiquer un sscce qui présente le problème.

+0

Cela a aidé, mais cela n'a pas résolu mon problème de redimensionnement. J'ai ajouté quelques captures d'écran et une description du problème de redimensionnement. Merci – prolink007

+2

@ prolink007 vous pouvez essayer cette idée http://stackoverflow.com/questions/7625762/setting-divider-location-on-a-jsplitpane-doesnt-work/7625843#7625843 – mKorbel

+0

Testons cela dans un peu. Vous permettra de connaître les résultats. – prolink007

Questions connexes