Co ma czcionka do wysrodkowania w Layout Menagerze ?

0

Cześć uczę się z książki co jakiś czas pisze się w niej jakieś proste programiki. Ale z reguły zanim zajrzę jak wygląda kod zapisany w książce próbuje napisać go sam. Odkryłem coś czego nie ma w książce i nie rozumiem dlaczego tak się dzieje. Jeśli włączycie ten program to wszystko będzie ładnie wyśrodkowane ( Etykiety Pola tekstowe i guzik ) ale wystarczy tylko usunąć linijkę tekst2.setFont(czcionkaD); w której ustawiam czcionkę dla pol tekstowych i cale wyśrodkowanie się rozjeżdża. Dlaczego tak się dzieje?

package javaapplication19;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
/**
 *
 * @author JRS
 */
public class quizEdytor {
    
    JFrame mainFrame;
    ArrayList <kartaQuizowa> listaKart;
    JTextArea tekst;
    JTextArea tekst2;
    
    public void gui(){
        mainFrame = new JFrame("Quiz Edytor");
        JPanel panel = new JPanel();
        JLabel pyt = new JLabel("Pytanie:");
        JLabel odp = new JLabel("Odpowiedz:");
         tekst = new JTextArea(6,20);
         tekst2 = new JTextArea(6,20);
         Font czcionkaD= new Font("sanserif",Font.BOLD,24);
         tekst.setLineWrap(true);
         tekst.setWrapStyleWord(true);
         tekst.setFont(czcionkaD);
         tekst2.setLineWrap(true);
         tekst2.setWrapStyleWord(true);
         tekst2.setFont(czcionkaD);
         
         
         
         JMenuBar menuGlowne = new JMenuBar();
         JMenu plik = new JMenu("Plik");
         JMenuItem nowy = new JMenuItem("Nowa Karta");
         JMenuItem zapisz = new JMenuItem("Zapisz Karte");
         plik.add(nowy);
       
         plik.add(zapisz);
         menuGlowne.add(plik);
         
       
        JButton button = new JButton("Nastepna Karta");
        button.addActionListener(new nastepnaKartaListener());
       
        JScrollPane rolka = new JScrollPane(tekst);
        rolka.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        rolka.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         JScrollPane rolka2 = new JScrollPane(tekst2);
        rolka2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        rolka2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
     
       
   
        panel.add(pyt);
        panel.add(rolka);
        panel.add(odp);
        panel.add(rolka2);
        panel.add(button);
        mainFrame.setJMenuBar(menuGlowne);
        mainFrame.getContentPane().add(BorderLayout.CENTER,panel);
        mainFrame.setSize(500,600);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setVisible(true);
    
        
}
    class nastepnaKartaListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            
        }
    
}
    class kartaQuizowa {
        kartaQuizowa(JTextArea p, JTextArea o){
            tekst=p;
            tekst2=o;
        }
        public JTextArea getPytanie(){
            return tekst;
            
        }
        public JTextArea getOdp(){
            return tekst2;
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        quizEdytor start = new quizEdytor();
        start.gui();
        // TODO code application logic here
    }
    
}

1

Nie ustawiasz menadżera dla panelu => stosowany jest domyślny, tzn. FlowLayout. Komponenty umieszczane są od lewej do prawej, ile się zmieści. Zmiana czcionki powoduje, że komponent rolka2 "grubieje" i następujący po nim komponent button się nie mieści i ląduje w nowym wierszu (co poprawia wygląd).
Ładny wygląd uzyskałeś właściwie przypadkiem, spróbuj rozszerzyć to ładne okno.

0

Do rozmieszczania komponentów w pionie można używać BoxLayout. Swego czasu napisałem do tego celu własnego menadżera VerticalLayout, który jest dużo prostszy w użyciu.

0

Zainteresował mnie ten problem tylko dlatego ze ja osiagnelem docelowy wygląd tej aplikacji w inny sposób a w książce było znacznie prościej tam zmienili tylko ta czcionkę. Aczkolwiek już doszedłem do tego ze tez nie jest to dobre rozwiązanie wystarczy rozszerzyć okno i już się wszystko zepsuje. Zastosowałem wiec setResizable(false) aczkolwiek nie pomogło wręcz zaszkodziło pewnie musiał bym odpowiednio poustawiać rozmiary JTextArea , rozmiar okna by to miało ręce i nogi. Tymczasem to nie istotne pisze ten prosty programik dalej. Dziękuje za odpowiedz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1