2

对于我的任务,我得到了这段代码:

// This class/method uses a  global variable that MUST be set before calling/using
// note: You can not call the paint routine directly, it is called when frame/window is shown
// look up the repaint() routine in the book
// Review Listings 8.5 and 8.6
//
public static class MyPanel extends JPanel {
 public void paintComponent (Graphics g) {
    int xpos,ypos;
    super.paintComponent(g);
    // set the xpos and ypos before you display the image
    xpos = 10; // you pick the position
    ypos = 10; // you pick the position
    if (theimage != null) {
        g.drawImage(theimage,xpos,ypos,this);
        // note: theimage global variable must be set BEFORE paint is called
    }
 }
}

我的教授还说:您还需要查看如何创建并将 a 添加JPanelJFrame. 如果您可以创建并添加一个JPanel,那么您需要做的就是用 ' MyPanel' 替换类名 ' JPanel',此代码将在窗口框架上显示一个图像。

他所说的“那么您需要做的就是用 'MyPanel' 替换类名 'JPanel' 并且此代码将在窗口框架上显示图像”是什么意思?我对我应该在哪里替代感到困惑MyPanel。这是我的代码:

public static class MyPanel extends JPanel {
 public void paintComponent (Graphics g) {
    int xpos,ypos;
    super.paintComponent(g);
    JPanel panel= new JPanel();
    JFrame frame= new JFrame();
    frame.setSize(500,400);
    frame.add(panel);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // set the xpos and ypos before you display the image
    xpos = 600; // you pick the position
    ypos = 600; // you pick the position
    if (theimage != null) {
        g.drawImage(theimage,xpos,ypos,this);
        // note: theimage global variable must be set BEFORE paint is called
    }
 }
}
4

2 回答 2

5

如果我理解您的要求...在您的作业中,您被要求扩展 JPanel 以满足您自己的需要。请注意,如果 JPanel 没有被扩展,您将如何添加它:

JFrame myFrame = new JFrame();
JPanel myPanel = new JPanel();
myFrame.add(myPanel);
myFrame.pack();
myFrame.setVisible(true);

这会将 JPanel 添加到 JFrame,将其打包并将其设置为可见。由于您的 myFrame 类扩展了 JPanel,因此您应该能够通过创建面板类的新实例并将其添加到 JFrame 来做一些非常相似的事情。

您不希望在 中执行此部分paintComponent(),因为paintComponent()可能会被多次调用。检查这里看看有什么paintComponent()作用。

于 2012-10-16T06:05:28.003 回答
3

@超级安东尼

所以它会类似于这个?:

MyPanel Mypanel= new MyPanel();
JFrame Myframe= new JFrame();
Myframe.setSize(500,400);
Myframe.add(Mypanel);
Myframe.setVisible(true);
Myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
于 2012-10-16T06:12:20.887 回答