Head First JAVA: 11. Chapter - Kamil-Jankowski/Learning-JAVA GitHub Wiki

Head First JAVA: 11. Chapter

GUI:

Dwa przyciski:

package interfejsGraficzny;

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

public class DwaPrzyciski {

    JFrame ramka;
    JLabel etykieta;

    public static void main(String[] args) {
        DwaPrzyciski gui = new DwaPrzyciski();
        gui.doRoboty();
    }

    public void doRoboty() {
        ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton przyciskEtykiety = new JButton("Zmień etykietę");
        przyciskEtykiety.addActionListener(new EtykietaListener());

        JButton przyciskKolor = new JButton("Zmień kolor");
        przyciskKolor.addActionListener(new KolorListener());

        etykieta = new JLabel("Oto etykieta");
        MojPanelGraficzny panel = new MojPanelGraficzny();

        ramka.getContentPane().add(BorderLayout.SOUTH, przyciskKolor);
        ramka.getContentPane().add(BorderLayout.CENTER, panel);
        ramka.getContentPane().add(BorderLayout.EAST, przyciskEtykiety);
        ramka.getContentPane().add(BorderLayout.WEST, etykieta);

        ramka.setSize(400, 300);
        ramka.setVisible(true);
    }

    class EtykietaListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent zdarzenieEtykieta) {
            etykieta.setText("Auuuuuuuu!");
        }
    }

    class KolorListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent zdarzenieKolor) {
            ramka.repaint();
        }
    }
}

Lista:

package interfejsGraficzny;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;

public class Lista implements ListSelectionListener {
//    Object[] listaOpcji = {"alfa", "beta", "gamma", "delta", "epsilon", "zeta", 7, "eta", "teta"};
    String[] listaOpcji = {"alfa", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "teta"};
    JList listaWyborow = new JList(listaOpcji);

    public static void main(String[] args) {
        Lista gui = new Lista();
        gui.tworzGUI();
    }

    private void tworzGUI() {
        JFrame ramka = new JFrame();
        JPanel panel = new JPanel();
        JScrollPane przewijanie = new JScrollPane(listaWyborow);

        listaWyborow.setVisibleRowCount(6);
        listaWyborow.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        listaWyborow.addListSelectionListener(this);

        przewijanie.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        przewijanie.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        panel.add(przewijanie);

        ramka.getContentPane().add(BorderLayout.NORTH, panel);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setBounds(900, 200, 100, 200);
        ramka.setVisible(true);
    }

    @Override
    public void valueChanged(ListSelectionEvent zdarzenie) {
        if(!zdarzenie.getValueIsAdjusting()){
            String opcja = (String) listaWyborow.getSelectedValue();
            System.out.println("Wybrana opcja: " + opcja);
        }
    }
}

Mój Panel Graficzny:

package interfejsGraficzny;
import java.awt.*;
import javax.swing.*;

public class MojPanelGraficzny extends JPanel {

    public static final int WARTOSCI_W_RGB = 256;

    public void paintComponent(Graphics g){

//        g.setColor(Color.orange);
//
//        g.fillRect(20, 50, 100, 100);
//---------------------------------------------------------------------//
//        String sciezkaPliku = "E:\\Documents\\_PROGRAMOWANIE_\\Java\\RuszGlowa\\11\\src\\interfejsGraficzny/R2D2.jpg";
//        Image obrazek = new ImageIcon(sciezkaPliku).getImage();
//        g.drawImage(obrazek, 1, 1, this);
//---------------------------------------------------------------------//
//        g.fillRect(0,0, this.getWidth(), this.getHeight());
//
//        int czerwony = (int)(Math.random()* WARTOSCI_W_RGB);
//        int zielony = (int)(Math.random()* WARTOSCI_W_RGB);
//        int niebieski = (int)(Math.random()* WARTOSCI_W_RGB);
//
//        Color kolorLosowy = new Color(czerwony, zielony, niebieski);
//        g.setColor(kolorLosowy);
//        g.fillOval(70, 70, 100, 100);
//---------------------------------------------------------------------//
//        Graphics2D g2d = (Graphics2D) g;
//
//        GradientPaint gradient = new GradientPaint(70, 70, Color.blue, 150,150, Color.orange);
//
//        g2d.setPaint(gradient);
//        g2d.fillOval(70, 70, 100, 100);
//---------------------------------------------------------------------//
        Graphics2D g2d = (Graphics2D) g;

        int czerwony = (int)(Math.random()*WARTOSCI_W_RGB);
        int zielony = (int)(Math.random()*WARTOSCI_W_RGB);
        int niebieski = (int)(Math.random()*WARTOSCI_W_RGB);
        Color kolorPoczatku = new Color(czerwony, zielony, niebieski);

        czerwony = (int)(Math.random()*WARTOSCI_W_RGB);
        zielony = (int)(Math.random()*WARTOSCI_W_RGB);
        niebieski = (int)(Math.random()*WARTOSCI_W_RGB);
        Color kolorKonca = new Color(czerwony, zielony, niebieski);

        GradientPaint gradientLosowy = new GradientPaint(70, 70, kolorPoczatku, 150, 150, kolorKonca);

        g2d.setPaint(gradientLosowy);
        g2d.fillOval(70, 70, 100, 100);
    }
}

Panel 1:

package interfejsGraficzny;

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

public class Panel1 {
    public static void main(String[] args) {
        Panel1 gui = new Panel1();
        gui.doRoboty();
    }

    private void doRoboty() {
        JFrame ramka = new JFrame();
        JPanel panel = new JPanel();
        JButton przycisk1 = new JButton("To szok!");
        JButton przycisk2 = new JButton("Trach!");
        JButton przycisk3 = new JButton("Och?!");

        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        panel.setBackground(Color.darkGray);
        panel.add(przycisk1);
        panel.add(przycisk2);
        panel.add(przycisk3);

        ramka.getContentPane().add(BorderLayout.EAST, panel);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setSize(200, 200);
        ramka.setVisible(true);
    }
}

Pole tekstowe:

package interfejsGraficzny;

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

public class PoleTekstowe implements ActionListener {
    JFrame ramka = new JFrame();
    JPanel panel = new JPanel();
    JTextField poleTekstowe = new JTextField(20);
    JLabel pole = new JLabel("Podaj nazwisko");

    public static void main(String[] args) {
        PoleTekstowe gui = new PoleTekstowe();
        gui.doRoboty();
    }

    public void doRoboty() {
        panel.add(pole);
        panel.add(poleTekstowe);

        poleTekstowe.requestFocus();
        poleTekstowe.addActionListener(this);
        poleTekstowe.setText("nazwisko");
        poleTekstowe.selectAll();

        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.getContentPane().add(BorderLayout.NORTH, panel);
        ramka.setBounds(600, 300, 380, 300);
        ramka.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent zdarzenie) {
        System.out.println(poleTekstowe.getText());
        poleTekstowe.setText("");
    }
}

Pole tekstowe WW1:

package interfejsGraficzny;

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

public class PoleTekstoweWW1 implements ActionListener {
    JTextArea tekst;

    public static void main(String[] args) {
        PoleTekstoweWW1 gui = new PoleTekstoweWW1();
        gui.tworzGUI();
    }

    public void tworzGUI() {
        JFrame ramka = new JFrame();
        JPanel panel = new JPanel();
        JButton przycisk = new JButton("Po prostu kliknij");
        tekst = new JTextArea(10, 20);
        JScrollPane przewijanie = new JScrollPane(tekst);

        przewijanie.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        przewijanie.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        tekst.setLineWrap(true);
        tekst.setText("Not all those who wander are lost");
        tekst.selectAll();

        przycisk.addActionListener(this);

        panel.add(przewijanie);

        ramka.getContentPane().add(BorderLayout.CENTER, panel);
        ramka.getContentPane().add(BorderLayout.SOUTH, przycisk);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setBounds(600, 300, 380, 300);
        ramka.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent zdarzenie) {
        tekst.append("\nPrzycisk kliknięty");
    }
}

Pole wyboru:

package interfejsGraficzny;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class PoleWyboruBox implements ItemListener {
    JCheckBox poleWyboru;

    public static void main(String[] args) {
        PoleWyboruBox gui = new PoleWyboruBox();
        gui.tworzGUI();
    }

    private void tworzGUI() {
        JFrame ramka = new JFrame();
        poleWyboru = new JCheckBox("Grasz dalej?");

//        poleWyboru.setSelected(true);
//        poleWyboru.setSelected(false);
        poleWyboru.addItemListener(this);

        ramka.getContentPane().add(BorderLayout.CENTER, poleWyboru);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setBounds(600, 200, 100, 75);
        ramka.setVisible(true);
    }

    @Override
    public void itemStateChanged(ItemEvent zdarzenie) {
        String wlaczoneCzyNie = "wyłączone";
        if(poleWyboru.isSelected()) wlaczoneCzyNie = "włączone";
        System.out.println("Pole jest " + wlaczoneCzyNie);
    }
}

Prosta animacja:

package interfejsGraficzny;
import javax.swing.*;
import java.awt.*;

public class ProstaAnimacja {

    int x = 70;
    int y = 70;

    public static void main(String[] args) {
        ProstaAnimacja gui = new ProstaAnimacja();
        gui.doRoboty();
    }

    public void doRoboty() {
        JFrame ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MojPanelRysunkowy panel = new MojPanelRysunkowy();

        ramka.getContentPane().add(panel);
        ramka.setSize(300,300);
        ramka.setVisible(true);

        for (int i = 0; i<130; i++){
            x++;
            y++;

            panel.repaint();                                                              // lub: ramka.repaint();

            try {
                Thread.sleep(50);
            }catch (Exception e){}
        }
    }

    class MojPanelRysunkowy extends JPanel{
        public void paintComponent(Graphics g){
            g.setColor(Color.white);                                                      // wtedy ten kod
            g.fillRect(0, 0, this.getWidth(), this.getHeight());                          // jest niepotrzebny

            g.setColor(Color.green);
            g.fillOval(x, y, 40, 40);
        }
    }
}

Prosty GUI:

package interfejsGraficzny;
import javax.swing.*;

public class ProstyGUI1 {
    public static void main(String[] args) {

        JFrame ramka = new JFrame();                                    // Utworzenie ramki
        JButton przycisk = new JButton("Kliknij mnie");            // Utworzenie przycisku

        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);           // Program zostanie zakończony bezpośrednio po zamknięciu okna

        ramka.getContentPane().add(przycisk);                           // Dodanie przycisku do panelu znajdującego się wewnątrz stworzonej ramki

        ramka.setSize(300, 300);                           // Określenie rozmiaru ramki

        ramka.setVisible(true);                                         // Określenie widoczności ramki
    }
}

Prosty GUI 1b:

package interfejsGraficzny;
import javax.swing.*;
import java.awt.event.*;

public class ProstyGUI1b implements ActionListener{
    JButton przycisk;

    public static void main(String[] args) {
        ProstyGUI1b apGUI = new ProstyGUI1b();
        apGUI.doDziela();
    }

    public void doDziela() {
        JFrame ramka = new JFrame();
        przycisk = new JButton("Kliknij mnie");

        przycisk.addActionListener(this);

        ramka.getContentPane().add(przycisk);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setSize(300, 300);
        ramka.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent zdarzenie) {
        przycisk.setText("Zostałem kliknięty");
    }
}

Prosty GUI 1c:

package interfejsGraficzny;

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

public class ProstyGUI1c implements ActionListener {
    private static JFrame ramka;
    private static JButton przycisk;
    private static MojPanelGraficzny panelR;

    public static void main(String[] args) {
        ProstyGUI1c apGUI = new ProstyGUI1c();
        apGUI.doDziela();
    }

    private void doDziela() {
        ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        przycisk = new JButton("Kliknij by zmienić kolor");
        przycisk.addActionListener(this);

        panelR = new MojPanelGraficzny();

        ramka.getContentPane().add(BorderLayout.SOUTH, przycisk);
        ramka.getContentPane().add(BorderLayout.CENTER, panelR);

        ramka.setSize(300, 300);
        ramka.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent zdarzenie) {
        ramka.repaint();
    }
}

Prosty GUI rysowanie:

package interfejsGraficzny;

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

public class ProstyGUIRysowanie{

    public static void main(String[] args) {
        ProstyGUIRysowanie apGUI = new ProstyGUIRysowanie();
        apGUI.doDziela();
    }

    public void doDziela() {
        JFrame ramka = new JFrame();
        MojPanelGraficzny panel = new MojPanelGraficzny();

        ramka.getContentPane().add(panel);
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramka.setSize(1130, 1130);
        ramka.setVisible(true);
    }
}

Przycisk:

package interfejsGraficzny;

import javax.swing.*;
import javax.swing.plaf.BorderUIResource;
import java.awt.*;

public class Przycisk1 {
    public static void main(String[] args) {
        Przycisk1 gui = new Przycisk1();
//        gui.doRobotyWsch();
//        gui.doRobotyPln();
//        gui.doRobotyDUZE();
        gui.doRoboty();
    }

    private void doRoboty() {
        JFrame ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton polnoc = new JButton("Północ");
        JButton poludnie = new JButton("Południe");
        JButton wschod = new JButton("Wschód");
        JButton zachod = new JButton("Zachód");
        JButton center = new JButton("Centrum");

        ramka.getContentPane().add(BorderLayout.NORTH, polnoc);
        ramka.getContentPane().add(BorderLayout.SOUTH, poludnie);
        ramka.getContentPane().add(BorderLayout.EAST, wschod);
        ramka.getContentPane().add(BorderLayout.WEST, zachod);
        ramka.getContentPane().add(BorderLayout.CENTER, center);

        ramka.setSize(300, 300);
        ramka.setVisible(true);
    }


    private void doRobotyWsch() {
        JFrame ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton przycisk = new JButton("Kliknij mnie jeśli chcesz");
        ramka.getContentPane().add(BorderLayout.EAST, przycisk);
        ramka.setSize(200, 200);
        ramka.setVisible(true);
    }
    private void doRobotyPln() {
        JFrame ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton przycisk = new JButton("Nie ma, nie ma wody na...");
        ramka.getContentPane().add(BorderLayout.NORTH, przycisk);
        ramka.setSize(200, 200);
        ramka.setVisible(true);
    }

    private void doRobotyDUZE() {
        JFrame ramka = new JFrame();
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton przycisk = new JButton("Kliknij TU!");
        Font duzaCzcionka = new Font("serif", Font.BOLD, 28);
        przycisk.setFont(duzaCzcionka);
        ramka.getContentPane().add(BorderLayout.NORTH, przycisk);
        ramka.setSize(200, 200);
        ramka.setVisible(true);
    }
}

Audio player:

Mini odtwarzacz 1:

package odtwarzacz;

import javax.sound.midi.*;

public class MiniOdtwarzacz1 {

    public static void main(String[] args) {

        try{
            Sequencer sekwenser = MidiSystem.getSequencer();
            sekwenser.open();

            Sequence sekwencja = new Sequence(Sequence.PPQ, 4);
            Track sciezka = sekwencja.createTrack();

            for(int i = 5; i<61; i+=4){
                sciezka.add(tworzZdarzenie(144, 1, i, 100, i));
                sciezka.add(tworzZdarzenie(128, 1, i, 100, i+2));
            }

            sekwenser.setSequence(sekwencja);
            sekwenser.setTempoInBPM(220);
            sekwenser.start();

        } catch (Exception ex){ex.printStackTrace();}
    }

    public static MidiEvent tworzZdarzenie(int plc, int kanal, int jeden, int dwa, int takt) {
        MidiEvent zdarzenie = null;
        try{
            ShortMessage a = new ShortMessage();
            a.setMessage(plc, kanal, jeden, dwa);
            zdarzenie = new MidiEvent(a, takt);

        }catch (Exception e){}
        return zdarzenie;
    }
}

Mini odtwarzacz 2:

package odtwarzacz;

import javax.sound.midi.*;

public class MiniOdtwarzacz2 implements ControllerEventListener{

    public static void main(String[] args) {
        MiniOdtwarzacz2 mini = new MiniOdtwarzacz2();
        mini.doRoboty();
    }
    public void doRoboty(){
        try{
            Sequencer sekwenser = MidiSystem.getSequencer();
            sekwenser.open();

            int[] zdarzeniaObslugiwane = {127};
            sekwenser.addControllerEventListener(this, zdarzeniaObslugiwane);
            Sequence sekwencja = new Sequence(Sequence.PPQ, 4);
            Track sciezka = sekwencja.createTrack();

            for(int i = 5; i<61; i+=4){
                sciezka.add(tworzZdarzenie(144, 1, i, 100, i));

                sciezka.add(tworzZdarzenie(176, 1, 127, 0, i));     // 176 - controller event,

                sciezka.add(tworzZdarzenie(128, 1, i, 100, i+2));
            }

            sekwenser.setSequence(sekwencja);
            sekwenser.setTempoInBPM(220);
            sekwenser.start();

        } catch (Exception ex){ex.printStackTrace();}
    }

    public static MidiEvent tworzZdarzenie(int plc, int kanal, int jeden, int dwa, int takt) {
        MidiEvent zdarzenie = null;
        try{
            ShortMessage a = new ShortMessage();
            a.setMessage(plc, kanal, jeden, dwa);
            zdarzenie = new MidiEvent(a, takt);

        }catch (Exception e){}
        return zdarzenie;
    }

    @Override
    public void controlChange(ShortMessage event) {
        System.out.println("La");
    }
}

Mini odtwarzacz 3:

package odtwarzacz;
import javax.sound.midi.*;
import javax.swing.*;
import java.awt.*;

public class MiniOdtwarzacz3 {

    static JFrame ramka = new JFrame("Moje pierwsze muzyczne wideo");
    static MojPanelGraf panel;

    public static void main(String[] args) {
        MiniOdtwarzacz3 mini = new MiniOdtwarzacz3();
        mini.doRoboty();
    }

    private void konfigurujGUI() {
        ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel = new MojPanelGraf();
        ramka.setContentPane(panel);
        ramka.setBounds(30, 30, 300, 300);
        ramka.setVisible(true);
    }

    public void doRoboty() {
        konfigurujGUI();
        int tempo = 220;

        try{
            Sequencer sekwenser = MidiSystem.getSequencer();
            sekwenser.open();

            int[] nasluchiwaneZdarzenie = {127};
            sekwenser.addControllerEventListener(panel, nasluchiwaneZdarzenie);

            Sequence sekwencja = new Sequence(Sequence.PPQ, 4);
            Track sciezka = sekwencja.createTrack();

            int losowaNuta = 0;

            for(int i=5; i<60; i+=4){
                losowaNuta = (int)((Math.random()*50)+1);
                sciezka.add(tworzZdarzenie(144, 1, losowaNuta, 100, i));
                sciezka.add(tworzZdarzenie(176, 1, 127, 0, i));
                sciezka.add(tworzZdarzenie(128, 1, losowaNuta, 100, i+2));
            }

            sekwenser.setSequence(sekwencja);
            sekwenser.setTempoInBPM(tempo);
            sekwenser.start();
        }catch(Exception ex){ex.printStackTrace();}
    }

    public static MidiEvent tworzZdarzenie(int plc, int kanal, int jeden, int dwa, int takt){
        MidiEvent zdarzenie = null;
        try{
            ShortMessage a = new ShortMessage();
            a.setMessage(plc, kanal, jeden, dwa);
            zdarzenie = new MidiEvent(a, takt);
        }catch(Exception e){}
        return zdarzenie;
    }

    public class MojPanelGraf extends JPanel implements ControllerEventListener {
        private static final int WARTOSC_W_RGB = 256;
        private static final int MINIMALNE_PRZESUNIECIE = 10;
        private static final int MAKSYMALNE_PRZESUNIECIE = 90;
        private static final int MINIMALNY_ROZMIAR = 10;
        private static final int MAKSYMALNY_ROZMIAR = 190;

        boolean komunikat = false;

        @Override
        public void controlChange(ShortMessage event) {
            komunikat = true;
            repaint();
        }

        public void paintComponent(Graphics g){
            if(komunikat){

                Graphics2D g2d = (Graphics2D) g;

                ustawKolorLosowy(g);

                // ustalamy losowe położenie i rozmiar prostokątów:
                int polozenieX = (int)((Math.random()* MAKSYMALNE_PRZESUNIECIE)+ MINIMALNE_PRZESUNIECIE);
                int polozenieY = (int)((Math.random()* MAKSYMALNE_PRZESUNIECIE)+ MINIMALNE_PRZESUNIECIE);
                int szerokosc = (int)((Math.random()* MAKSYMALNY_ROZMIAR)+ MINIMALNY_ROZMIAR);
                int wysokosc = (int)((Math.random()* MAKSYMALNY_ROZMIAR)+ MINIMALNY_ROZMIAR);

                g.fillRect(polozenieX, polozenieY, szerokosc, wysokosc);
                komunikat = false;
            }
        }

        public void ustawKolorLosowy(Graphics g) {
            int czerwony = (int)(Math.random()* WARTOSC_W_RGB);
            int zielony = (int)(Math.random()* WARTOSC_W_RGB);
            int niebieski = (int)(Math.random()* WARTOSC_W_RGB);

            g.setColor(new Color(czerwony, zielony, niebieski));
        }
    }
}

Exceptions:

Pranie:

package pranie;

public class Pranie {
    public void zrobPranie() throws SpodnieExeption, BieliznaException{
        System.out.println("Wyjątki, wyjątki!");
        throw new SpodnieExeption();
//        throw new pranie.BieliznaException();
    }
}

Bielizna exception:

package pranie;

public class BieliznaException extends Exception {
}

Spodnie exception:

package pranie;

public class SpodnieExeption extends Exception {
}

Test:

package pranie;

public class Test {
    public void doDziela(){
        Pranie pranie = new Pranie();
        try{
            pranie.zrobPranie();
        } catch(SpodnieExeption sex){
            System.out.println("Spodnie exception");
        } catch (BieliznaException bex){
            System.out.println("Bielizna exception");
        }
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.doDziela();
    }
}

MusicMachine:

Muzyka tester:

package muzmachina;

import javax.sound.midi.*;

public class MuzaTester1 {
    public void graj(){
        try{
            Sequencer sekwenser = MidiSystem.getSequencer();
            System.out.println("Mamy sekwenser!");            
        } catch(MidiUnavailableException ex){
            System.out.println("Masz problem");
        }
        
    }

    public static void main(String[] args) {
        MuzaTester1 mt = new MuzaTester1();

        mt.graj();
    }
}

Mini mini music application:

package muzmachina;

import javax.sound.midi.*;

public class MiniMiniMuzaAplk {

    public static void main(String[] args) {
        MiniMiniMuzaAplk mini = new MiniMiniMuzaAplk();
        mini.graj();
    }

    private void graj() {
        try{
            Sequencer sekwenser = MidiSystem.getSequencer();
            sekwenser.open();

            Sequence sekwencja = new Sequence(Sequence.PPQ, 4);

            Track sciezka = sekwencja.createTrack();

            ShortMessage a = new ShortMessage();
            a.setMessage(144, 1, 44, 100);              // co należy wykonać (typ komunikatu, {kanał, nuta do zagrania, szybkość} - zmienne w zależności od typu komunikatu)
            MidiEvent nutaPoczatek = new MidiEvent(a, 1);                        // kiedy należy to wykonać (co zagrać, który takt)
            sciezka.add(nutaPoczatek);                                               // 144 - note on (zacznij grać)

            ShortMessage b = new ShortMessage();
            b.setMessage(128, 1, 44, 100);              // 128 - note off (zakończ granie)
            MidiEvent nutaKoniec = new MidiEvent(b, 16);
            sciezka.add(nutaKoniec);

            ShortMessage c = new ShortMessage();
            c.setMessage(192, 1, 123, 0);               // 192 - zmiana instrumentu
            MidiEvent zmianaInstrumentu = new MidiEvent(c, 17);
            sciezka.add(zmianaInstrumentu);

            ShortMessage d = new ShortMessage();
            d.setMessage(144, 1, 44, 100);
            MidiEvent nuta2Poczatek = new MidiEvent(d, 17);
            sciezka.add(nuta2Poczatek);

            ShortMessage e = new ShortMessage();
            e.setMessage(128, 1, 44, 100);
            MidiEvent nuta2Koniec = new MidiEvent(e, 32);
            sciezka.add(nuta2Koniec);

            sekwenser.setSequence(sekwencja);

            sekwenser.start();
        } catch (Exception ex){ex.printStackTrace();}
    }
}

Mini music application:

package muzmachina;

import javax.sound.midi.*;

public class MiniMuzaAplkWrsPlc {

    public static void main(String[] args) {
        MiniMuzaAplkWrsPlc mini = new MiniMuzaAplkWrsPlc();
        if(args.length < 2){
            System.out.println("Nie zapomnij podać argumentów określających instrument i nutę");
        } else{
            int instrument = Integer.parseInt(args[0]);
            int nuta = Integer.parseInt(args[1]);
            mini.graj(instrument, nuta);
        }
    }

    public void graj(int instrument, int nuta) {

        try{

            Sequencer sekwenser = MidiSystem.getSequencer();
            sekwenser.open();

            Sequence sekwencja = new Sequence(Sequence.PPQ, 4);
            Track sciezka = sekwencja.createTrack();

            MidiEvent zdarzenie = null;

            ShortMessage pierwszy = new ShortMessage();
            pierwszy.setMessage(192, 1, instrument, 0);
            MidiEvent zmienInstrument = new MidiEvent(pierwszy, 1);
            sciezka.add(zmienInstrument);

            ShortMessage a = new ShortMessage();
            a.setMessage(144, 1, nuta, 100);
            MidiEvent nutaPoczatek = new MidiEvent(a, 1);
            sciezka.add(nutaPoczatek);

            ShortMessage b = new ShortMessage();
            b.setMessage(128, 1, nuta, 100);
            MidiEvent nutaKoniec = new MidiEvent(b, 16);
            sciezka.add(nutaKoniec);

            sekwenser.setSequence(sekwencja);
            sekwenser.start();

        }catch(Exception ex){ex.printStackTrace();}
    }
}

MuzMachina:

package muzmachina;

import javax.sound.midi.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.ArrayList;

public class MuzMachina {

    JPanel panelGlowny;
    ArrayList<JCheckBox> listaPolWyboru;
    Sequencer sekwenser;
    Sequence sekwencja;
    Track sciezka;
    JFrame ramkaGlowna;

    String[] nazwyInstrumentow = {"Bass Drum", "Closed Hi-Hat", "Open Hi-Hat", "Acoustinc Snare", "Crash Cymbal",
                                  "Hand Clap", "High Tom", "Hi Bongo", "Maracas", "Whistle", "Low Conga", "Cowbell",
                                  "Vibraslap", "Low-mid Tom", "High Agogo", "Open Hi Conga"};
    int[] instrumenty = {35, 42, 46, 38, 49, 39, 50, 60, 70, 72, 64, 56, 58, 47, 67, 63};

    public static void main(String[] args) {
        new MuzMachina().tworzGUI();
    }

    private void tworzGUI() {
        ramkaGlowna = new JFrame("muzmachina.MuzMachina");

        listaPolWyboru = new ArrayList<>();
        GridLayout siatkaPolWyboru = new GridLayout(16,16);
        panelGlowny = new JPanel(siatkaPolWyboru);
        BorderLayout uklad = new BorderLayout();
        JPanel panelTla = new JPanel(uklad);

        Box obszarPrzyciskow = new Box(BoxLayout.Y_AXIS);
        JButton start = new JButton("Start");
        JButton stop = new JButton("Stop");
        JButton tempoGora = new JButton("Szybciej");
        JButton tempoDol = new JButton("Wolniej");
        JButton zapisz = new JButton("Zapisz");
        JButton odtworz = new JButton("Odtwórz");

        Box obszarNazw = new Box(BoxLayout.Y_AXIS);


        for (int i = 0; i<16; i++){
            obszarNazw.add(new Label(nazwyInstrumentow[i]));
        }

        start.addActionListener(new MojStartListener());
        stop.addActionListener(new MojStopListener());
        tempoGora.addActionListener(new MojTempoGoraListener());
        tempoDol.addActionListener(new MojTempoDolListener());
        zapisz.addActionListener(new ZapiszListener());
        odtworz.addActionListener(new OdtworzListener());

        obszarPrzyciskow.add(start);
        obszarPrzyciskow.add(stop);
        obszarPrzyciskow.add(tempoGora);
        obszarPrzyciskow.add(tempoDol);
        obszarPrzyciskow.add(zapisz);
        obszarPrzyciskow.add(odtworz);

        siatkaPolWyboru.setVgap(1);
        siatkaPolWyboru.setHgap(2);

        panelTla.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        panelTla.add(BorderLayout.EAST, obszarPrzyciskow);
        panelTla.add(BorderLayout.WEST, obszarNazw);
        panelTla.add(BorderLayout.CENTER, panelGlowny);

        for (int i=0; i<256; i++){
            JCheckBox c = new JCheckBox();
            c.setSelected(false);
            listaPolWyboru.add(c);
            panelGlowny.add(c);
        }

        konfigurujMidi();

        ramkaGlowna.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ramkaGlowna.getContentPane().add(panelTla);
        ramkaGlowna.setBounds(500, 150, 300, 300);
        ramkaGlowna.pack();
        ramkaGlowna.setVisible(true);
    }

    public class MojStartListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent akcja) {
            utworzSciezkeIOdtworz();
        }
    }

    public class MojStopListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent akcja) {
            sekwenser.stop();
        }
    }

    public class MojTempoGoraListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent akcja) {
            float wspTempa = sekwenser.getTempoFactor();            // wspTempa = 1.0
            float szybszyWspTempa = (float)(wspTempa * 1.03);       // tempo + 3%
            sekwenser.setTempoFactor(szybszyWspTempa);
        }
    }

    public class MojTempoDolListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            float wspTempa = sekwenser.getTempoFactor();                // wspTempa = 1.0
            float wolniejszyWspTempa = (float)(wspTempa * 0.97);        // tempo - 3%
            sekwenser.setTempoFactor(wolniejszyWspTempa);
        }
    }

    private void konfigurujMidi() {
        try{
            sekwenser = MidiSystem.getSequencer();
            sekwenser.open();
            sekwencja = new Sequence(Sequence.PPQ, 4);
            sciezka = sekwencja.createTrack();
            sekwenser.setTempoInBPM(120);
        }catch (Exception e){e.printStackTrace();}
    }

    public void utworzSciezke(int[] lista){
        for (int i = 0; i<16; i++){
            int klucz = lista[i];
            if(klucz != 0){
                sciezka.add(tworzZdarzenie(144,9,klucz,100,i));             // NOTE ON
                sciezka.add(tworzZdarzenie(128,9,klucz,100,i+1));      // NOTE OFF
            }
        }
    }

    private MidiEvent tworzZdarzenie(int plc, int kanal, int jeden, int dwa, int takt) {
        MidiEvent zdarzenie = null;
        try{
            ShortMessage a = new ShortMessage();
            a.setMessage(plc, kanal, jeden, dwa);
            zdarzenie = new MidiEvent(a, takt);
        }catch(Exception e){e.printStackTrace();}
        return zdarzenie;
    }

    public void utworzSciezkeIOdtworz() {
        int[] listaSciezki = null;
        final int BRAK_NUTY = 0;

        sekwencja.deleteTrack(sciezka);
        sciezka = sekwencja.createTrack();

        for (int i = 0; i < 16; i++) {
            listaSciezki = new int[16];

            int klucz = instrumenty[i];

            for (int j = 0; j < 16; j++) {
                JCheckBox jc = (JCheckBox) listaPolWyboru.get(j + (16 * i));
                if (jc.isSelected()) {
                    listaSciezki[j] = klucz;
                } else {
                    listaSciezki[j] = BRAK_NUTY;
                }
            }

            utworzSciezke(listaSciezki);
            sciezka.add(tworzZdarzenie(176, 1, 127, 0, 16));        // tworzymy zdarzenia dla danego instrumentu i wszystkich 16 taktów, po czym zapisujemy je na ścieżce
        }

        sciezka.add(tworzZdarzenie(192, 9, 1, 0, 15));              // upewniamy się, że w ostatnim takcie zawsze coś będzie

        try {
            sekwenser.setSequence(sekwencja);
            sekwenser.setLoopCount(sekwenser.LOOP_CONTINUOUSLY);
            sekwenser.start();
            sekwenser.setTempoInBPM(120);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public class ZapiszListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent zd) {
            //tworzymy tablicę ze stanami pól wyboru
            int iloscPolWyboru = 256;
            boolean[] stanyPol = new boolean[iloscPolWyboru];

            for(int i = 0; i < iloscPolWyboru; i++){
                JCheckBox pole = (JCheckBox) listaPolWyboru.get(i);
                if (pole.isSelected()) {
                    stanyPol[i] = true;
                }
            }

            JFileChooser plikZapisu = new JFileChooser();
            plikZapisu.showSaveDialog(ramkaGlowna);
            File sciezkaZapisu = new File(String.valueOf(plikZapisu.getSelectedFile()));

            try{
                FileOutputStream strumienPliku = new FileOutputStream(sciezkaZapisu);
                ObjectOutputStream strumienWyjsciaObiektu = new ObjectOutputStream(strumienPliku);
                strumienWyjsciaObiektu.writeObject(stanyPol);
            }catch(Exception ex){ex.printStackTrace();}
        }
    }

    public class OdtworzListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent a) {
            sekwenser.stop();
            boolean[] stanyPol = null;

            JFileChooser plikOdczytu = new JFileChooser();
            plikOdczytu.showOpenDialog(ramkaGlowna);
            File sciezkaOdczytu = new File(String.valueOf(plikOdczytu.getSelectedFile()));

            try{
                FileInputStream plikDanych = new FileInputStream(sciezkaOdczytu);
                ObjectInputStream strumienWejsciaObiektu = new ObjectInputStream(plikDanych);
                stanyPol = (boolean[]) strumienWejsciaObiektu.readObject();
            }catch(Exception ex){ex.printStackTrace();}

            int iloscPolWyboru = 256;

            for (int i = 0; i < iloscPolWyboru; i++){
                JCheckBox pole = (JCheckBox) listaPolWyboru.get(i);
                if(stanyPol[i]) {
                    pole.setSelected(true);
                }else {
                    pole.setSelected(false);
                }
                utworzSciezkeIOdtworz();
            }
        }
    }
}

⚠️ **GitHub.com Fallback** ⚠️