如何将另一个class.java文件作为对象添加到JPanel

时间:2019-04-14 19:24:23

标签: java class oop inheritance jpanel

我有一个任务是使用paint方法(足够简单)在一个类中创建一个笑脸图形,并使用一个按钮使其显示在主类的9个不同面板中。我知道按钮和笑脸的画法都很好,但是对于将第2类中创建的对象带入第1类JPanel的最佳方法,我似乎找不到明确的答案。

现在的代码相当粗糙,但是我觉得我的表已经正确布局了,我只是不知道如何调用第二类的paint方法。

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 个答案:

答案 0 :(得分:1)

我认为您所要做的只是引入一个扩展JPanel并实现其paintComponent方法的类。然后将此类的新实例添加到网格的每个部分。 (我认为,如果您实例化一次,然后多次添加相同的引用,则可能会遇到一些问题)

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

之所以起作用,是因为在绘制容器(例如您获得的contentPane)时,它也会调用其子级的paintComponent方法。因此,您应该能够像上面编写的那样将此自定义JPanel添加到网格中,并且paintComponent中发生的所有绘制操作都将发生!

另外,您可能应该将mainPanel添加到窗口中,否则它将不会显示。