我有一个任务是使用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)
{
}
}
答案 0 :(得分:1)
我认为您所要做的只是引入一个扩展JPanel并实现其paintComponent方法的类。然后将此类的新实例添加到网格的每个部分。 (我认为,如果您实例化一次,然后多次添加相同的引用,则可能会遇到一些问题)
public class Smiley extends JPanel {
paintComponent(Graphics g) {
//do stuff here
}
}
之所以起作用,是因为在绘制容器(例如您获得的contentPane)时,它也会调用其子级的paintComponent方法。因此,您应该能够像上面编写的那样将此自定义JPanel添加到网格中,并且paintComponent中发生的所有绘制操作都将发生!
另外,您可能应该将mainPanel添加到窗口中,否则它将不会显示。