首页 > 解决方案 > 如何调用另一个 class.java 文件作为对象添加到 JPanel

问题描述

我有一个任务是使用paint方法(足够简单)在一个类中创建一个笑脸图形,并使用一个按钮使其出现在主类的9个不同面板中。我很好地理解了按钮和笑脸的绘画,但我似乎无法找到一个明确的答案,即在第一堂课中将第二堂课中创建的对象带入 JPanel 的最佳方法是什么。

代码现在非常粗糙,但我觉得我的表格已经正确布置了所有内容,我只是不知道如何调用第二类的绘制方法。

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)
{

}
}

标签: javaclassoopinheritancejpanel

解决方案


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

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

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

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


推荐阅读