2017-02-11 2 views
0

Ich lese das Buch Head First in Java und ich kann nicht herausfinden, warum sie die Elemente vertikal nicht korrekt angezeigt werden. Der Code lautet:GUI & BorderLayout

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Font; 

import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.ScrollPaneConstants; 

public class QuizCardBuilder { 

    private JTextArea question; 
    private JTextArea answer; 
    private JFrame frame; 

public static void main(String[] args) { 
    QuizCardBuilder card = new QuizCardBuilder(); 
    card.go(); 
} 

public void go(){ 
    frame = new JFrame("Quiz Card Builder"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel panel =new JPanel(); 


    question = new JTextArea(10,20); 
    question.setLineWrap(true); 
    question.setWrapStyleWord(true); 
    question.setFont(new Font("Serif", Font.ITALIC, 16)); 

    JScrollPane scrollPane = new JScrollPane(question); 
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

    answer = new JTextArea(10,20); 
    answer.setLineWrap(true); 
    answer.setWrapStyleWord(true); 
    answer.setFont(new Font("Calibri", Font.BOLD, 21)); 

    JScrollPane qScroll = new JScrollPane(answer); 
    qScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    qScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

    JButton nextBtn = new JButton("Next Card"); 

    JLabel qLabel = new JLabel("Question:"); 
    JLabel aLabel = new JLabel("Answer:"); 

    panel.add(qLabel); 
    panel.add(scrollPane); 
    panel.add(aLabel); 
    panel.add(qScroll); 
    panel.add(nextBtn); 

    JMenuBar menuBar=new JMenuBar(); 
    JMenu fileMenu = new JMenu("File"); 
    JMenuItem newMenuItem = new JMenuItem("New"); 
    JMenuItem saveMenuItem = new JMenuItem("Save"); 

    fileMenu.add(newMenuItem); 
    fileMenu.add(saveMenuItem); 
    menuBar.add(fileMenu); 
    frame.setJMenuBar(menuBar); 
    frame.getContentPane().add(panel, BorderLayout.CENTER); 
    frame.setSize(500, 600); 
    frame.setVisible(true); 

} 
} 

Sollte ich GridLayout verwenden? Es gibt ein anderes Problem, das ich nicht verstehe?

+1

„*, warum sie nicht richtig die Elemente angezeigt, vertikal *“ Sie setzen alle Komponenten in ein Panel mit einem Standard "FlowLayout", das sie horizontal ausrichtet. – user1803551

Antwort

2

Sie das Layout der panel auf eine BoxLayout einstellen könnte, so dass die Komponenten vertikal ausgerichtet werden:

panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 
+0

Danke. Du hast Recht. –

+1

Bitte [akzeptieren Sie die Antwort] (http://meta.stackexchange.com/a/5235/155831), wenn dies zur Lösung des Problems beigetragen hat. –

+0

@ Θανάσης Gern geschehen. Bitte akzeptieren Sie die Antwort, wenn Ihr Problem gelöst wurde. – badjr