Saya sudah mencoba banyak hal untuk menjalankan ini. Tujuannya adalah untuk menggambar lingkaran yang bisa diklik pengguna. Saya tidak bisa mendapatkan apa pun untuk melukis ke JPanel. Saya awalnya memperluas JFrame tetapi menyadari bahwa saya perlu memperluas JPanel. Saya menggunakan IntelliJ GUI Designer untuk tata letak. Saya akan sangat menghargai bantuan apa pun.

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

public class Main extends JPanel implements Runnable {
    private JPanel jPanel1;
    private JTabbedPane tabbedPane1;
    private JTextField textField1;
    private JButton submitButton;
    private JButton resetButton;
    private JPanel cartPanel;
    private JLabel imageLabel;
    private static Main instance;
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillOval(100,100,500,500);
        g.setColor(Color.YELLOW);
        g.fillOval(10, 10, 200, 200);
        // draw Eyes
        g.setColor(Color.BLACK);
        g.fillOval(55, 65, 30, 30);
        g.fillOval(135, 65, 30, 30);
        // draw Mouth
        g.fillOval(50, 110, 120, 60);
        // adding smile
        g.setColor(Color.YELLOW);
        g.fillRect(50, 110, 120, 30);
        g.fillOval(50, 120, 120, 40);

    }
    public Main(){
        JFrame jf = new JFrame();
        jf.setTitle("Defect Mapping");
        jf.setContentPane(this.jPanel1);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //this.setJMenuBar(jUnitMenuBar());
        ImageIcon img = new ImageIcon("C:\\Users\\jaitken\\IdeaProjects\\ERP\\icon.gif");
        jf.setIconImage(img.getImage());
        jf.pack();
        jf.setSize(1280, 720);
        jf.setResizable(false);
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
        run();
    }

    public void run(){
        instance = this;
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

    }

}

Ini adalah file perancang formulir IntelliJ.

https://Pastebin.com/Z3b0PVtZ

0
Eskiho 13 Mei 2021, 06:38

1 menjawab

Jawaban Terbaik
jf.setContentPane(this.jPanel1);

Variabel "jPanel1` adalah null. Jadi pernyataan itu tidak melakukan apa-apa.

public class Main extends JPanel implements

Lukisan kustom Anda selesai di kelas "Utama", tetapi Anda tidak pernah membuat turunan dari kelas itu atau menambahkan panel ke bingkai.

Baca bagian dari tutorial Swing di Lukisan Kustom untuk cara yang lebih baik untuk menyusun kode Anda dan melakukan pengecatan khusus. Saya sarankan Anda memulai dari awal dan mengunduh kode demo dari "langkah 2" untuk digunakan sebagai titik awal untuk kode Anda.

jf.pack();
jf.setSize(1280, 720);
jf.setResizable(false);

Maksud dari memanggil pack() adalah agar semua komponen yang ditambahkan ke bingkai ditampilkan pada ukuran yang diinginkan. Setelah Anda melakukan pengecatan kustom dengan benar, panel kustom Anda akan memiliki ukuran yang diinginkan.

Memanggil setSize(...) mengalahkan tujuan menjalankan paket(). Singkirkan pernyataan itu.

Juga, pernyataan setResizable(...) perlu dipanggil SEBELUM pernyataan pack() karena akan mengubah ukuran dekorasi pada bingkai.

run();

Pernyataan itu harus menjadi pernyataan pertama dalam metode main(). LAF harus disetel SEBELUM Anda membuat komponen Swing.

Tujuannya adalah menggambar lingkaran yang bisa diklik pengguna

Setelah Anda menyelesaikan pengecatan dasar, Anda perlu memperbaikinya untuk menyimpan ArrayList of Shapes yang ingin Anda lukis sehingga nantinya Anda dapat menentukan lingkaran mana yang diklik pengguna. Lihat: Seret Bentuk yang dilukis untuk contoh lengkap yang menunjukkan cara mengeklik dan menyeret bentuk ke sekeliling panel.

3
camickr 13 Mei 2021, 03:59