hendroprwk08

Overriding - JSwing

Dec 8th, 2025 (edited)
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -----------------------
  2. Nama file: Buku.java
  3. -----------------------
  4.  
  5. public class Buku {
  6.     String judul;
  7.     String penulis;
  8.     int tahunTerbit;
  9.  
  10.     // Konstruktor
  11.     Buku(String judul, String penulis,
  12.     int tahunTerbit) {
  13.         this.judul = judul;
  14.         this.penulis = penulis;
  15.         this.tahunTerbit = tahunTerbit;
  16.     }
  17.  
  18.     // Metode untuk menampilkan informasi buku
  19.     void tampilInfo() {
  20.         System.out.println("Judul: " +
  21.         judul);
  22.         System.out.println("Penulis: " +
  23.         penulis);
  24.         System.out.println("Tahun Terbit: " +
  25.         tahunTerbit);
  26.     }
  27. }
  28.  
  29. -----------------------
  30. Nama file: BukuFiksi.java
  31. -----------------------
  32.  
  33. public class BukuFiksi extends Buku {
  34.     String genre;
  35.  
  36.     // Konstruktor
  37.     BukuFiksi(
  38.         String judul,
  39.         String penulis,
  40.         int tahunTerbit,
  41.         String genre
  42.         ) {
  43.         super(judul, penulis, tahunTerbit);
  44.         this.genre = genre;
  45.     }
  46.  
  47.     // Override metode tampilInfo untuk menampilkan genre tambahan
  48.     @Override
  49.     void tampilInfo() {
  50.         super.tampilInfo();
  51.         System.out.println("Genre: " +
  52.         genre);
  53.     }
  54. }
  55.  
  56. -----------------------
  57. Nama file: BukuNonFiksi.java
  58. -----------------------
  59.  
  60. public class BukuNonFiksi  extends Buku{
  61.     String topik;
  62.  
  63.     // Konstruktor
  64.     BukuNonFiksi(
  65.         String judul,
  66.         String penulis,
  67.         int tahunTerbit,
  68.         String topik) {
  69.         super(judul, penulis, tahunTerbit);
  70.         this.topik = topik;
  71.     }
  72.  
  73.     // Override metode tampilInfo untuk menampilkan topik tambahan
  74.     @Override
  75.     void tampilInfo() {
  76.         super.tampilInfo();
  77.         System.out.println("Topik: " + topik);
  78.     }
  79. }
  80.  
  81.  
  82. -----------------------
  83. Nama file: Perpustakaan.java
  84. -----------------------
  85.  
  86. import java.util.ArrayList;
  87. import java.util.List;
  88.  
  89. public class Perpustakaan {
  90. List<Buku> koleksiBuku = new ArrayList<>();
  91.  
  92.     // Metode untuk menambahkan buku (Create)
  93.     void tambahBuku(Buku buku) {
  94.         koleksiBuku.add(buku);
  95.     }
  96.  
  97.     // Metode untuk menampilkan semua buku (Read)
  98.     void tampilkanSemuaBuku() {
  99.         for (Buku buku : koleksiBuku) {
  100.             buku.tampilInfo();
  101.             System.out.println("--------------");
  102.         }
  103.     }
  104.  
  105.     // Metode untuk mencari buku berdasarkan judul (Read)
  106.     Buku cariBuku(String judul) {
  107.         for (Buku buku : koleksiBuku) {
  108.             if (buku.judul.equals(judul)) {
  109.                 return buku;
  110.             }
  111.         }
  112.         return null;
  113.     }
  114.  
  115.     // Metode untuk menghapus buku (Delete)
  116.     void hapusBuku(Buku buku) {
  117.         koleksiBuku.remove(buku);
  118.     }
  119. }
  120.  
  121. -----------------------
  122. Nama file: FormPerpustakaan.java
  123. -----------------------
  124.  
  125. import javax.swing.*;
  126. import java.awt.*;
  127.  
  128. public class FormPerpustakaan extends JFrame {
  129.  
  130.     // inisiasi perpustakaan
  131.     private Perpustakaan perpustakaan = new Perpustakaan();
  132.  
  133.     // inisiasi komponen
  134.     private JTextField txtJudul = new JTextField();
  135.     private JTextField txtPenulis = new JTextField();
  136.     private JTextField txtTahun = new JTextField();
  137.     private JTextField txtGenreTopik = new JTextField();
  138.  
  139.     private JComboBox<String> cmbJenis = new JComboBox<>(new String[] { "Fiksi", "NonFiksi" });
  140.     private JTextArea areaOutput = new JTextArea(5, 5);
  141.  
  142.     public FormPerpustakaan() {
  143.         // JFrame
  144.         setTitle("Form Perpustakaan");
  145.         setSize(350, 400);
  146.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  147.         setLocationRelativeTo(null);
  148.         setLayout(null);
  149.  
  150.         // judul
  151.         JLabel lblJudul = new JLabel("Judul:");
  152.         lblJudul.setBounds(20, 20, 80, 25);
  153.         add(lblJudul);
  154.  
  155.         txtJudul.setBounds(100, 20, 200, 25);
  156.         add(txtJudul);
  157.  
  158.         // penulis
  159.         JLabel lblPenulis = new JLabel("Penulis:");
  160.         lblPenulis.setBounds(20, 50, 80, 25);
  161.         add(lblPenulis);
  162.  
  163.         txtPenulis.setBounds(100, 50, 200, 25);
  164.         add(txtPenulis);
  165.  
  166.         // tahun terbit
  167.         JLabel lblTahunTerbit = new JLabel("Tahun:");
  168.         lblTahunTerbit.setBounds(20, 80, 80, 25);
  169.         add(lblTahunTerbit);
  170.  
  171.         txtTahun.setBounds(100, 80, 50, 25);
  172.         add(txtTahun);
  173.  
  174.         // jenis buku
  175.         JLabel lblJenis = new JLabel("Jenis Buku:");
  176.         lblJenis.setBounds(20, 110, 80, 25);
  177.         add(lblJenis);
  178.  
  179.         cmbJenis.setBounds(100, 110, 200, 25);
  180.         add(cmbJenis);
  181.  
  182.         // genre atau topik
  183.         JLabel lblGenreTopik = new JLabel("Genre/Topik:");
  184.         lblGenreTopik.setBounds(20, 140, 80, 25);
  185.         add(lblGenreTopik);
  186.  
  187.         txtGenreTopik.setBounds(100, 140, 200, 25);
  188.         add(txtGenreTopik);
  189.  
  190.         // tombol tambah
  191.         JButton btnTambah = new JButton("Tambah");
  192.         btnTambah.setBounds(20, 180, 90, 30);
  193.         add(btnTambah);
  194.  
  195.         // tombol hapus
  196.         JButton btnHapus = new JButton("Hapus");
  197.         btnHapus.setBounds(115, 180, 90, 30);
  198.         add(btnHapus);
  199.  
  200.         // tombol tampil
  201.         JButton btnTampil = new JButton("Tampil");
  202.         btnTampil.setBounds(210, 180, 90, 30);
  203.         add(btnTampil);
  204.  
  205.         // area output
  206.         areaOutput.setEditable(true);
  207.  
  208.         // bungkus dengan JScrollPane
  209.         JScrollPane scrollPane = new JScrollPane(areaOutput);
  210.         scrollPane.setBounds(20, 230, 280, 100);
  211.         add(scrollPane);
  212.  
  213.         // tambahkan action listener untuk tombol
  214.         btnTambah.addActionListener(e -> tambahBuku());
  215.         btnHapus.addActionListener(e -> hapusBuku());
  216.         btnTampil.addActionListener(e -> tampilkanSemuaBuku());
  217.     }
  218.  
  219.     private void tampilkanSemuaBuku() {
  220.         areaOutput.setText("Daftar Buku:\n");
  221.         for (Buku b : perpustakaan.koleksiBuku) {
  222.             areaOutput.append("Judul: " + b.judul + "\n");
  223.             areaOutput.append("Penulis: " + b.penulis + "\n");
  224.             areaOutput.append("Tahun: " + b.tahunTerbit + "\n");
  225.  
  226.             if (b instanceof BukuFiksi) {
  227.                 areaOutput.append("Genre: " + ((BukuFiksi) b).genre + "\n");
  228.             } else if (b instanceof BukuNonFiksi) {
  229.                 areaOutput.append("Topik: " + ((BukuNonFiksi) b).topik + "\n");
  230.             }
  231.             areaOutput.append("----------------------\n");
  232.         }
  233.     }
  234.  
  235.     private void tambahBuku() {
  236.         try {
  237.             String judul = txtJudul.getText();
  238.             String penulis = txtPenulis.getText();
  239.             int tahun = Integer.parseInt(txtTahun.getText());
  240.             String genreTopik = txtGenreTopik.getText();
  241.  
  242.             // simpan buku berdasarkan jenisnya
  243.             Buku buku;
  244.             if (cmbJenis.getSelectedItem().equals("Fiksi")) {
  245.                 buku = new BukuFiksi(judul, penulis, tahun, genreTopik);
  246.             } else {
  247.                 buku = new BukuNonFiksi(judul, penulis, tahun, genreTopik);
  248.             }
  249.  
  250.             perpustakaan.tambahBuku(buku);
  251.             areaOutput.append("Buku berhasil ditambahkan!\n");
  252.         } catch (Exception ex) {
  253.             JOptionPane.showMessageDialog(this, "Input tidak valid!");
  254.         }
  255.     }
  256.  
  257.     private void hapusBuku() {
  258.         String judul = JOptionPane.showInputDialog(this, "Masukkan judul buku yang ingin dihapus:");
  259.         Buku b = perpustakaan.cariBuku(judul);
  260.         if (b != null) {
  261.             perpustakaan.hapusBuku(b);
  262.             areaOutput.append("Buku berhasil dihapus!\n");
  263.         } else {
  264.             areaOutput.append("Buku tidak ditemukan.\n");
  265.         }
  266.     }
  267. }
  268.  
  269. -----------------------
  270. Nama file: Main.java
  271. -----------------------
  272.  
  273. import javax.swing.SwingUtilities;
  274.  
  275. public class Main {
  276.     public static void main(String[] args){
  277.         SwingUtilities.invokeLater(() -> {
  278.             FormPerpustakaan form = new FormPerpustakaan();
  279.             form.setVisible(true);
  280.         });
  281.     }
  282. }
  283.  
Advertisement
Add Comment
Please, Sign In to add comment