Wątek przeniesiony 2019-01-02 09:05 z Newbie przez Adam Boduch.

Splash screen - prośba o wsparcie

Odpowiedz Nowy wątek
2018-12-30 12:49
0

Witam serdecznie

Jestem początkującym w języku Java. Bardzo początkującym. Pracuję nad projektem, ale nie mając podstaw (uczę się sam) bardzo mi ciężko znaleźć rozwiązanie. Wziąłem udział w projekcie programistycznym w którym są trzy zadania do wykonania. Jest to projekt, który pozwoli mi nauczyć się programowania. Oczywiście jeżeli mi uda się zaliczyć zdania. Jestem zmotywowany i bardzo mi na tym zależy.

Pierwsze zadanie to: Aplikacja, która wyświetla ekran startowy z dowolnym obrazkiem (tzw. splash screen). Ekran startowy widoczny jest przez 5 sekund. Użytkownik może w tym czasie nacisnąć przycisk BACK co powinno zatrzymać przejście do ekranu głównego aplikacji. Jeżeli użytkownik nie użyje przycisku BACK to aplikacja po 5 sekundach zamyka ekran startowy i przechodzi do pustego ekranu głównego.

Napisałem coś takiego: W poniższym programie pojawia się ramka z obrazkiem oraz przyciskiem BACK. Po kliknięciu przycisku okienko się zamyka. Jeżeli poczekamy 5s to okienko także się zamyka. Zrobiłem to po to, aby widzieć, że aplikacja działa. Niestety nie umiem pokazać po 5s drugiego obrazka (lub pustego okienka) bez przycisku BACK.

Niestety nie rozumiem wielu spraw. Czy mógłbym poprosić o pomoc? Pozdrawiam Łukasz.

import javax.swing.*;
import java.awt.event.ActionEvent;

class SplashScreenIntive extends JFrame {

JButton b1;

public SplashScreenIntive() {

        setTitle("Splash Screen Intive");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setContentPane(new JLabel(new ImageIcon("intive_welcome.jpg")));

        JButton b1 = new JButton("BACK");
        b1.setBounds(100, 200, 100, 50);
        b1.addActionListener((ActionEvent event) -> {
        System.exit(0);
        });

        add(b1);
        setSize(300, 500);

        }

public static void main(String args[]) {

        int duration = 5000;
        SplashScreenIntive ex = new SplashScreenIntive();
        ex.setVisible(true);

        try {
        Thread.sleep(duration);
        } 

        catch (InterruptedException e) {
        }

        ex.setVisible(false);
        System.exit(0);       
    }

}

@Koziołek

Pozostało 580 znaków

2018-12-30 13:31
0

zrobić drugą funkcję tyle, że bez:

JButton b1 = new JButton("BACK");
b1.setBounds(100, 200, 100, 50);
b1.addActionListener((ActionEvent event) -> {
System.exit(0);
});
add(b1);

(kod przycisku), względnie usuwając / zmieniając nazwę obrazka:

 setContentPane(new JLabel(new ImageIcon("intive_welcome.jpg")));

Wywołać analogicznie do pierwszej.

A potem zrób refactor - wyodrębnij powtarzający się kod.

edytowany 2x, ostatnio: elwis, 2018-12-30 13:33
A czy jest szansa na demonstrację? Nie mogę tego ogarnąć. - John Lucas Wayne 2018-12-30 14:15

Pozostało 580 znaków

2018-12-30 15:14
0

A czy jest szansa na demonstrację? Nie mogę tego ogarnąć. Kiedy próbuję stworzyć:

    public void SplashScreenIntive2() {

        setTitle("Splash Screen Intive");
        setSize(300, 500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setContentPane(new JLabel(new ImageIcon("intive_main.jpg")));

to nie wiem jak wywołać.

@Koziołek

edytowany 1x, ostatnio: John Lucas Wayne, 2018-12-30 17:16

Pozostało 580 znaków

2018-12-30 21:22
0

Witam

Zmodyfikowałem kod, ale nie obrazki w ramce nie są pokazywane:

import javax.swing.*;
import java.awt.event.ActionEvent;

public final class SplashScreenIntive extends JFrame {

    public SplashScreenIntive() {

        System.out.println("0s: Welcome window!");

        setSize(310, 510);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(true);
        setVisible(true);

        SplashScreenIntive1();

        try {
            Thread.sleep(5000);
        } 

        catch (InterruptedException e) {}

        System.out.println("5s: Main window!"); 

        SplashScreenIntive2();      

    }

    public void SplashScreenIntive1() {

        setTitle("Splash Screen Intive: Welcome");
        setContentPane(new JLabel(new ImageIcon("intive_welcome.jpg")));

        JButton b1 = new JButton("BACK");
        b1.setBounds(100, 200, 100, 50);
        b1.addActionListener((ActionEvent event) -> {
        System.exit(0);
        });

        add(b1);

    }

    public void SplashScreenIntive2() {

        setTitle("Splash Screen Intive: Main");
        setContentPane(new JLabel(new ImageIcon("intive_main.jpg")));

    }

    public static void main(String[] args) {

        new SplashScreenIntive();

    //  setVisible(false);
    //  System.exit(0);   

    }   

}

@Koziołek

edytowany 1x, ostatnio: John Lucas Wayne, 2018-12-30 21:22

Pozostało 580 znaków

2018-12-31 11:03
0

Opisane w kompendium Własny ekran powitalny

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