2010-05-02 15 views
2

Problème:BorderLayout problème avec JSplitPane après avoir ajouté JToolBar (Java)

Ma mise en page du programme est très bien, comme ci-dessous avant d'ajouter JToolBar à BorderLayout.PAGE_START Voici une capture d'écran avant JToolBar est ajouté: alt text

Voilà comment cela ressemblait à l'ajout de JToolbar: alt text

Puis-je savoir ce que j'ai fait de mal?

Voici le code je:

//Create the text pane and configure it. 
    textPane = new JTextPane(); 
    -snipped code- 
    JScrollPane scrollPane = new JScrollPane(textPane); 
    scrollPane.setPreferredSize(new Dimension(300, 300)); 

    //Create the text area for the status log and configure it. 
    changeLog = new JTextArea(5, 30); 
    changeLog.setEditable(false); 
    JScrollPane scrollPaneForLog = new JScrollPane(changeLog); 

    //Create a split pane for the change log and the text area. 
    JSplitPane splitPane = new JSplitPane(
      JSplitPane.VERTICAL_SPLIT, 
      scrollPane, scrollPaneForLog); 
    splitPane.setOneTouchExpandable(true); 

    //Create the status area. 
    JPanel statusPane = new JPanel(new GridLayout(1, 1)); 
    CaretListenerLabel caretListenerLabel = 
      new CaretListenerLabel("Caret Status"); 
    statusPane.add(caretListenerLabel); 

    //Create the toolbar 
    JToolBar toolBar = new JToolBar(); 
    -snipped code- 

    //Add the components. 
    getContentPane().add(toolBar, BorderLayout.PAGE_START); 
    getContentPane().add(splitPane, BorderLayout.CENTER); 
    getContentPane().add(statusPane, BorderLayout.PAGE_END); 

    //Set up the menu bar. 
    actions = createActionTable(textPane); 
    JMenu editMenu = createEditMenu(); 
    JMenu styleMenu = createStyleMenu(); 
    JMenuBar mb = new JMenuBar(); 
    mb.add(editMenu); 
    mb.add(styleMenu); 
    setJMenuBar(mb); 

S'il vous plaît aider, je suis nouveau bâtiment GUI, et je ne me sens pas comme utiliser Netbeans pour faire glisser et déposer l'interface utilisateur pour moi ... Merci en avance.

Répondre

3

Au lieu d'utiliser setSize() sur le JFrame, définissez la taille préférée de votre composant central que vous faites maintenant et invoquez pack(), qui « provoque cette fenêtre pour être dimensionnée à la taille préférée et mise en page de ses sous-composants. » L'expansion sur @ l'exemple de Bragaadeesh,

public static void main(String[] args) { 
    TestFrame frame = new TestFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.build(); 
    frame.pack(); 
    frame.setVisible(true); 
} 

Ensuite, passez à scrollPane.setPreferredSize(new Dimension(500, 300)) ou JTextArea changeLog = new JTextArea(10, 30) pour voir la différence.

+0

@trashgod: Oh! Donc c'est comme ça que ça doit être. Je vous remercie! –

2

Je ne sais pas quel est le problème. J'ai essayé de l'exécuter sur mon système en corrigeant les problèmes de compilation. Voici le code et la capture d'écran.

test frame

import java.awt.*; 
import javax.swing.*; 

public class TestFrame extends JFrame{ 
    public static void main(String[] args) { 
     TestFrame frame = new TestFrame(); 
     frame.build(); 
     frame.setVisible(true); 

    } 

    public void build(){ 
     setSize(600,600); 
     //Create the text pane and configure it. 
     JTextPane textPane = new JTextPane(); 

     JScrollPane scrollPane = new JScrollPane(textPane); 
     scrollPane.setPreferredSize(new Dimension(300, 300)); 

     //Create the text area for the status log and configure it. 
     JTextArea changeLog = new JTextArea(5, 30); 
     changeLog.setEditable(false); 
     JScrollPane scrollPaneForLog = new JScrollPane(changeLog); 

     //Create a split pane for the change log and the text area. 
     JSplitPane splitPane = new JSplitPane(
       JSplitPane.VERTICAL_SPLIT, 
       scrollPane, scrollPaneForLog); 
     splitPane.setOneTouchExpandable(true); 

     //Create the status area. 
     JPanel statusPane = new JPanel(new GridLayout(1, 1)); 
     JLabel caretListenerLabel = 
       new JLabel("Caret Status"); 
     statusPane.add(caretListenerLabel); 

     //Create the toolbar 
     JToolBar toolBar = new JToolBar(); 
     toolBar.add(new JButton("Btn1")); 
     toolBar.add(new JButton("Btn2")); 
     toolBar.add(new JButton("Btn3")); 
     toolBar.add(new JButton("Btn4")); 

     //Add the components. 
     getContentPane().add(toolBar, BorderLayout.PAGE_START); 
     getContentPane().add(splitPane, BorderLayout.CENTER); 
     getContentPane().add(statusPane, BorderLayout.PAGE_END); 

     //Set up the menu bar. 
     JMenu editMenu = new JMenu("test"); 
     JMenu styleMenu = new JMenu("test"); 
     JMenuBar mb = new JMenuBar(); 
     mb.add(editMenu); 
     mb.add(styleMenu); 
     setJMenuBar(mb); 

    } 
} 
+0

@Bragaadeesh: Ok ... c'est bizarre. Je vais essayer de copier coller celui que vous avez utilisé et tester et voir. Merci. –

1

EDIT: Je comprends pourquoi maintenant.

J'ai utilisé Paint pour me donner une estimation grossière des pixels, et auparavant je ne savais pas que la hauteur depuis le début de la barre de titre du cadre supérieur est comptée! Donc, cela équivaut à ~ = 504. Je comprends maintenant.

Alors la prochaine fois que je dois régler la hauteur à peu près, je pense que je vais utiliser Paint.

alt text


Hmmm bizarre. Je dois changer de:

//Display the window. 
frame.setSize(640, 480); 

à

//Display the window. 
frame.setSize(640, 504); 

Alors seulement cela fonctionne. Est-ce que quelqu'un peut m'apprendre comment estimer ou définir la largeur/hauteur pour les composants? Parce qu'au départ, je voulais que ce soit 640,480 mais apparemment maintenant il faut 640,504.