JTabbedPane - rozmieszczanie komponentów

0

Hej

Mam problem z JTabbedPane, a mianowicie, nie potrafię ustawić wielkości i rozmieszczenia JTextArea. Jak ustawię setLayout na null to znika wszystko poza buttonem (nawet jak dodam setBounds)
Czy ktoś może rzucić na to okiem i pomóc z ustawieniem tego okna ?


package oknodialogowe;

import java.awt.Dimension;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import static javax.swing.JSplitPane.RIGHT;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class OknoDialogowe extends JFrame implements ActionListener {

    private PanelDodawaniaUzytkownika panelDodawaniaUzytkownika;
   
    private JPanel panelTrening;
    private JLabel labelTrening;
    private JTabbedPane tabbedPane;
    private JTextArea notatnik;
    private JScrollPane scrollPane;
    private JButton buttonDodajUzytkownika;

    public OknoDialogowe ()
    {
        setTitle("Okno dialogowe");
        setSize(400,400);
        
        labelTrening = new JLabel("Trening");
        panelTrening = new JPanel();
        panelTrening.add(labelTrening);
        
        notatnik = new JTextArea();
        notatnik.setWrapStyleWord(true);
        notatnik.setMaximumSize(new Dimension(200,200));
      
        scrollPane = new JScrollPane(notatnik);
        add(scrollPane);
        
        buttonDodajUzytkownika = new JButton("Dodaj użytkownika");
        buttonDodajUzytkownika.setBounds(10,250,180,30);
        add(buttonDodajUzytkownika);
        buttonDodajUzytkownika.addActionListener(this);
        
        tabbedPane = new JTabbedPane();
        tabbedPane.addTab("Pierwszy panel",scrollPane);
        tabbedPane.addTab("Drugi panel", panelTrening);
        add(tabbedPane);
        

    }
    
    public static void main(String[] args) {
        OknoDialogowe app = new OknoDialogowe();
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setVisible(true);
        
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        
        if (panelDodawaniaUzytkownika == null)
            panelDodawaniaUzytkownika = new PanelDodawaniaUzytkownika(this);
        panelDodawaniaUzytkownika.setVisible(true);
        
        panelDodawaniaUzytkownika.setFocus();
        
        if (panelDodawaniaUzytkownika.isOk())
        {
        notatnik.append(panelDodawaniaUzytkownika.getPoleTekstoweUżytkownika()+ "\n");
        }
    }
    
}

class PanelDodawaniaUzytkownika extends JDialog implements ActionListener
{

    private JLabel lUzytkownik;
    private JTextField poleTekstoweUżytkownika;
    private JButton buttonZapisz, buttonKasuj;
    private boolean okData;
    
    public PanelDodawaniaUzytkownika(JFrame owner)
    {
        super(owner, "Wprowadzanie uzytkownika", true);
        setSize(300,200);
        setLayout(null);
        
        lUzytkownik = new JLabel("Użytkownik", JLabel.RIGHT);
        lUzytkownik.setBounds(0,10,100,20);
        add(lUzytkownik);
        
        poleTekstoweUżytkownika = new JTextField();
        poleTekstoweUżytkownika.setBounds(120,10,100,20);
        add(poleTekstoweUżytkownika);
        
        buttonZapisz = new JButton("Zapisz");
        buttonZapisz.setBounds(40,100,100,20);
        add(buttonZapisz);
        buttonZapisz.addActionListener(this);
        
        
        buttonKasuj = new JButton("Kasuj");
        buttonKasuj.setBounds(160,100,100,20);
        add(buttonKasuj);
        buttonKasuj.addActionListener(this);
    }

    public String getPoleTekstoweUżytkownika() {
        return poleTekstoweUżytkownika.getText();
    }
    
    public boolean isOk()
    {
    return okData;
    }
    
    public void setFocus()
    {
    poleTekstoweUżytkownika.requestFocusInWindow();
    }
    
    @Override
    public void actionPerformed(ActionEvent ae) {
        
        Object z= ae.getSource();
        if (z == buttonZapisz)
            okData = true;
        else 
            okData = false;
        
        setVisible(false);
   }

}
0

zerknij, który Ci najbardziej odpowiada
https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
Osobiście najczęściej korzystam z gridbaglayouta oraz z buildera wbudowanego w NB

Przy okazji poczytaj o MVC :)

0

Moim zdaniem konstruktor klasy OknoDialogowe jest źle napisany.

  • Używasz menadżera rozkładu (BorderLayout) i ten menadżer powinien porozmieszczać elementy, metoda setBounds jest nie na miejscu.
  • Metoda add() przy menadżerze BorderLayout powinna mieć dwa argumenty: komponent i lokalizacja (np.BorderLayout.EAST - po prawej). Ty wywołujesz ją z jednym argumentem, a to oznacza lokalizację domyślną BorderLayout.CENTER - w centrum, czyli wszystkie komponenty w tej samej lokalizacji.

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