Diskuze: JFrame - spouštění dvou oken

Java Java JFrame - spouštění dvou oken

Avatar
etesarova
Člen
Avatar
etesarova:

Ahoj, jsem začátečník a potřebovala bych pomoc - mám vytvořit aplikaci, kde má uživatel možnost napsat nějaký text do prvního okna a v druhém oknu se ten text má posunovat doprava. První okno se otevře ok, druhé se zasekne po dobu, než se text posune doprava, pak se teprve zobrazí ten text a okno jde zavřít. Mohli byste mi prosím napsat, co tam mám blbě?

první třída:

package dveOknaPodruhe;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class DveOkna extends JFrame{
        private JPanel topPanel, centerPanel;
        JTextField zdrojTextu = new JTextField("",20);
        private JButton animuj;
        private Container pane;

        public DveOkna() {
                pane = this.getContentPane();
                pane.setLayout(new BorderLayout());

                topPanel = new JPanel();
                topPanel.setLayout(new FlowLayout());
                topPanel.setBackground(Color.GRAY);

                centerPanel = new JPanel();
                centerPanel.setLayout(new FlowLayout());
                centerPanel.setBackground(Color.LIGHT_GRAY);

                pane.add(topPanel, BorderLayout.NORTH);
                pane.add(centerPanel, BorderLayout.CENTER);

                topPanel.add(zdrojTextu);
                zdrojTextu.setFont(new Font("Monospaced", Font.PLAIN, 30));
                zdrojTextu.setForeground(Color.RED);

                setComponents();
                setListeners();

                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setTitle("První okno");
                setSize(500, 300);


        }
        private void setListeners() {
                this.animuj.addActionListener(new ActionListener() {

                        @Override
                        public void actionPerformed(ActionEvent arg0) {
                                String text = new String(zdrojTextu.getText());
                                DveOknaDruhe.zobrazDruheOkno(text);
                        }
                });

        }
        private void setComponents() {
                animuj = new JButton("animuj");
                centerPanel.add(animuj);

        }
        public static void main(String[] args) {

                SwingUtilities.invokeLater(new Runnable() {

                        @Override
                        public void run() {
                                DveOkna dveOkna = new DveOkna();
                                dveOkna.setVisible(true);

                        }
                });


        }

}

a tady je druhé okno:

package dveOknaPodruhe;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Insets;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class DveOknaDruhe extends JFrame{
        private Container pane;
        private JLabel zprava;
        private Insets insets;
        private static final int ZPOZDENI = 1000;

        public DveOknaDruhe() {
                setSize(500, 300);
                setTitle("Druhé okno");
        }

        public static JFrame zobrazDruheOkno(String zprava) {
                DveOknaDruhe okno = new DveOknaDruhe();
                okno.setVisible(true);
                okno.vytvoritRotaci(zprava);

                return okno;

        }

        private void vytvoritRotaci(String text) {
                pane = this.getContentPane();
                pane.setLayout(null);
                pane.getBounds();
                insets = pane.getInsets();
                zprava = new JLabel(text);
                zprava.setFont(new Font("Monospaced", Font.PLAIN, 30));
                zprava.setForeground(Color.RED);
                pane.add(zprava);
                pane.setBackground(Color.DARK_GRAY);
                zprava.setBackground(Color.DARK_GRAY);


                posunujOkno();

        }

        private void posunujOkno() {
                int i = 0;
                while (i < pane.getWidth() - zprava.getWidth()) {
                        i+=20;
                        zprava.setBounds(insets.left + i, insets.top, 100, 100);
                        zprava.setSize(zprava.getWidth() + 20, zprava.getHeight());

                        try {
                                Thread.sleep(ZPOZDENI);
                        } catch (InterruptedException e) {
                                e.printStackTrace();
                        }

                }

        }



}
 
Odpovědět 29.6.2014 15:25
Avatar
etesarova
Člen
Avatar
Odpovídá na etesarova
etesarova:

tak už jsem na to přišla, zakopaný pudl byl samozřejmě ve vláknech :) čili už jenom pro to, aby tu ta odpověď byla:

první okno

public class OknoJedna extends JFrame implements ActionListener {
        JButton animuj = new JButton("animuj");
        JTextField zdrojTextu = new JTextField("", 20);
        String text;
        //private Thread thread;

        // private MyDialog dlg = new MyDialog(this);

        public OknoJedna() {
                super("Prvni okno");
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                getContentPane().setLayout(new FlowLayout());
                getContentPane().add(zdrojTextu);
                getContentPane().add(animuj);
                animuj.addActionListener(this);
                zdrojTextu.setFont(new Font("Monospaced", Font.PLAIN, 30));
                zdrojTextu.setForeground(Color.RED);

                setSize(450, 200);
                setBackground(Color.GRAY);

        }

        @Override
        public void actionPerformed(ActionEvent e) {
                Runnable task = new Runnable() {

                        @Override
                        public void run() {
                                text = new String(zdrojTextu.getText());
                                OknoDva f = new OknoDva();
                                f.setVisible(true);
                                f.vytvorRotaci(text);
                        }
                };

                Thread noveVlakno = new Thread(task);
                noveVlakno.start();

        }




        public static void main(String[] args) {
                JFrame f = new OknoJedna();
                f.setVisible(true);
        }

}

druhé okno:

public class OknoDva extends JFrame{
        Logger logger = Logger.getLogger(OknoDva.class.toString());
        private Container pane;
        private JLabel zprava;


        public OknoDva() {
                super("Druhe okno");
                setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                pane = this.getContentPane();
                pane.setLayout(null);
                pane.setBackground(Color.DARK_GRAY);

                setSize(700,500);
                setLocation(200,200);



        }

        public void vytvorRotaci(String text) {

                Insets insets = pane.getInsets();
                zprava = new JLabel(text);
                zprava.setFont(new Font("Monospaced", Font.PLAIN, 30));
                zprava.setForeground(Color.RED);
                pane.add(zprava, "North");
                zprava.setBackground(Color.DARK_GRAY);

                int i = 0;
                while (i < pane.getWidth() - zprava.getWidth()) {
                        i+=20;
                        zprava.setBounds(insets.left + i, insets.top, 100, 100);
                        zprava.setSize(zprava.getWidth() + 20, zprava.getHeight());
                        try {
                                Thread.sleep(200);
                                Thread.currentThread().interrupt();
                                this.repaint();
                        } catch (InterruptedException e) {
                                logger.fine("animuju!");
                        }
                }

                int j = 0;
                while (j < pane.getHeight() - zprava.getHeight() - 12) {
                        j+=20;
                        zprava.setBounds(insets.left + i, insets.top + j, 100, 100);
                        zprava.setSize(zprava.getWidth(), zprava.getHeight());

                        try {
                                Thread.sleep(200);
                                Thread.currentThread().interrupt();
                                this.repaint();
                        } catch (InterruptedException e) {
                                logger.fine("animuju!");
                        }

                }

                while (i > 0) {
                        i-=20;
                        zprava.setBounds(insets.left + i, insets.top + j, 100, 100);
                        zprava.setSize(zprava.getWidth() + 20, zprava.getHeight());

                        try {
                                Thread.sleep(200);
                                Thread.currentThread().interrupt();
                                this.repaint();
                        } catch (InterruptedException e) {
                                logger.fine("animuju!");
                        }

                }

                while (j > 0) {
                        j-=20;
                        zprava.setBounds(insets.left, insets.top + j, 100, 100);
                        zprava.setSize(zprava.getWidth(), zprava.getHeight());

                        try {
                                Thread.sleep(200);
                                Thread.currentThread().interrupt();
                                this.repaint();
                        } catch (InterruptedException e) {
                                logger.fine("animuju!");
                        }

                }

                zprava.setForeground(Color.DARK_GRAY);
        }

}
 
Nahoru Odpovědět 9.7.2014 15:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.