Как вызвать другой файл class.java как объект для добавления в JPanel - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть задание для создания рисунка смайлика в одном классе с использованием метода рисования (достаточно простого) и использования кнопки, чтобы он отображался на 9 различных панелях основного класса.Я прекрасно понимаю кнопку и рисунок смайлика, но не могу найти четкого ответа о том, какой наилучший подход к получению объекта, созданного во 2-м классе, введен в JPanel в 1-м классе.

Код сейчас довольно грубый, но я чувствую, что все правильно выложено с моими таблицами, я просто не знаю, как вызвать метод рисования 2-го класса.

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

public class SmileyGrid extends JFrame implements ActionListener
{

public static void main(String[] args)
{
    SmileyGrid myGrid = new SmileyGrid();
    myGrid.setSize(800, 800);
    myGrid.createGUI();
    myGrid.setVisible(true);
}

public SmileyGrid()
{


}

private void createGUI()
{
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    Container window = getContentPane();

    //3x3 layout for smileys
    GridLayout smileLayout = new GridLayout(3,3);

    //Parent panel for smileys
    JPanel panelSmiley = new JPanel ();


    JPanel mainPanel = new JPanel();
        mainPanel.setLayout (smileLayout);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);
        mainPanel.add(panelSmiley);




}

public void actionPerformed(ActionEvent ae)
{

}
}

1 Ответ

1 голос
/ 14 апреля 2019

Я думаю, что все, что вам нужно сделать, это ввести класс, расширяющий JPanel, и реализовать его метод paintComponent. Затем добавьте новый экземпляр этого класса в каждый раздел сетки. (Я думаю, что если вы создадите его один раз, а затем добавите одну и ту же ссылку несколько раз, у вас могут возникнуть проблемы)

public class Smiley extends JPanel {
    paintComponent(Graphics g) {
        //do stuff here
    }
}

Это работает, потому что, когда контейнер (например, полученный вами contentPane) окрашивается, он также вызывает свой детский метод paintComponent. Таким образом, вы сможете добавить этот пользовательский JPanel в сетку, как вы писали выше, и все операции рисования, происходящие в paintComponent, будут происходить!

Также вам, вероятно, следует добавить главную панель в окно, иначе она не будет отображаться.

...