JTabbedPane - rozmieszczanie komponentów

Odpowiedz Nowy wątek
2014-12-01 19:33
pea
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);
   }

}

Pozostało 580 znaków

2014-12-01 20:13
garai_nz
0

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

Przy okazji poczytaj o MVC :)

Pozostało 580 znaków

2014-12-02 08:10
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.

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans, 2014-12-02 12:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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