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

Splash screen - prośba o wsparcie

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

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.

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

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

0

Opisane w kompendium Własny ekran powitalny

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