dwa pytania o jframe

0

Sprawa wygląda tak. Mam napisany program. I nie wiem jak zrobić coś takiego. Główna klasa (jframe) za pomocą przycisku otwiera inne okno ( tez jframe) i to nowe okno pozwala na otwarcie jeszcze jednego okna ( tez jframe). Zastanawiam się jak zrobić aby był ustawiony jakiś poziom okien tzn. główny jframe zawsze będzie pod otwartymi oknami itd. Tak jakby poziom na którym ustawiają się okna. w zależności z którego jframe są uruchamiane.

I drugie pewnie prostsze uruchomić jframe tak aby otworzyło się na środku ekranu.

0
  1. zapoznaj się z klasą JLayeredPane
okno.setLocationRelativeTo(null);

pozdrawiam

0
bogdans_niezalogowany napisał(a)
  1. zapoznaj się z klasą JLayeredPane
okno.setLocationRelativeTo(null);

pozdrawiam

2.pkt dział dzięki co do pierwszego to widziałem to ale nie wiem zbytnio jak to zastosować.
Sprawa wygląda na razie tak, że po wciśnięciu przycisku otwiera się okno za pomocą
JFrame frame1=new szczegoly(). Nie wiem jak zastosować do tego jlayeredPane

0

Zamień JButton na JFrame i zobacz czy ci się przyda

/* Przyciski umieszczono w pięciu warstwach
 * Po kliknięciu wywoływana jest metoda moveToFront()
 * Jak widać działa tylko ona tylko w zakresie jednej warstwy
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class WarstwyPrzyciskow extends JFrame implements ActionListener
{
    private JLayeredPane lp=null;
    //------------------------
    public static void main(String[] args)
    {
        new WarstwyPrzyciskow();
    }
    //------------------------
    public WarstwyPrzyciskow()
    {
        super("Okno warstwowe");
        lp=getLayeredPane();
        getContentPane().setBackground(Color.white);
        int x=10,y=10;
        for (int i=1;i<=5;i++)
        {
            JButton b=new JButton("Warstwa "+i);
            b.setHorizontalAlignment(JButton.CENTER);
            b.setVerticalAlignment(JButton.TOP);
            b.setBounds(x,y,150,100);
            b.addActionListener(this);
            lp.add(b,new Integer(i));
            x+=30;
            y+=30;
        }
        JButton b=new JButton("Warstwa 5");
        b.setHorizontalAlignment(JButton.RIGHT);
        b.setVerticalAlignment(JButton.BOTTOM);
        b.setBounds(x+50,y,100,100);
        b.addActionListener(this);
        b.setBackground(Color.yellow);
        lp.add(b,new Integer(5),1);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,300);
        setVisible(true);
    }
    //------------------------
    public void actionPerformed(ActionEvent e)
    {
        JComponent komponent=(JComponent) e.getSource();
        lp.moveToFront(komponent);
    }
}
0
bogdans_niezalogowany napisał(a)

Zamień JButton na JFrame i zobacz czy ci się przyda

/* Przyciski umieszczono w pięciu warstwach
 * Po kliknięciu wywoływana jest metoda moveToFront()
 * Jak widać działa tylko ona tylko w zakresie jednej warstwy
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class WarstwyPrzyciskow extends JFrame implements ActionListener
{
    private JLayeredPane lp=null;
    //------------------------
    public static void main(String[] args)
    {
        new WarstwyPrzyciskow();
    }
    //------------------------
    public WarstwyPrzyciskow()
    {
        super("Okno warstwowe");
        lp=getLayeredPane();
        getContentPane().setBackground(Color.white);
        int x=10,y=10;
        for (int i=1;i<=5;i++)
        {
            JButton b=new JButton("Warstwa "+i);
            b.setHorizontalAlignment(JButton.CENTER);
            b.setVerticalAlignment(JButton.TOP);
            b.setBounds(x,y,150,100);
            b.addActionListener(this);
            lp.add(b,new Integer(i));
            x+=30;
            y+=30;
        }
        JButton b=new JButton("Warstwa 5");
        b.setHorizontalAlignment(JButton.RIGHT);
        b.setVerticalAlignment(JButton.BOTTOM);
        b.setBounds(x+50,y,100,100);
        b.addActionListener(this);
        b.setBackground(Color.yellow);
        lp.add(b,new Integer(5),1);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,300);
        setVisible(true);
    }
    //------------------------
    public void actionPerformed(ActionEvent e)
    {
        JComponent komponent=(JComponent) e.getSource();
        lp.moveToFront(komponent);
    }
}

Niestety tak łatwo nie ma. W ten sposób już próbowałem.

0

Chodzi ci może o coś takiego ?
http://atos.wmid.amu.edu.pl/~bogdan/Widok.jpg
Na dole jest nawigator po otwartych oknach.

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