我是Java的初学者,如果这个问题看起来有点愚蠢,请对不起
我有这个简单的代码,但是我不理解其中的一些代码。
我知道关键字this指向此类,但是我仍然不明白为什么需要这么做。
例如:
public class SquareSimp
{
public static void main( String[] args )
{
FilledFrame frame = new FilledFrame();
frame.setVisible( true );
}
}
class FilledFrame extends JFrame
{
int size = 400;
public FilledFrame()
{
JButton butSmall = new JButton("Small");
JButton butMedium = new JButton("Medium");
JButton butLarge = new JButton("Large");
JButton butMessage = new JButton("Say Hi!");
SquarePanel panel = new SquarePanel(this); WHERE DOES (THIS) REFER TO
AND WHY DO WE NEED IT?
JPanel butPanel = new JPanel();
butPanel.add(butSmall);
butPanel.add(butMedium);
butPanel.add(butLarge);
butPanel.add(butMessage);
add(butPanel, BorderLayout.NORTH);
add(panel, BorderLayout.CENTER);
setSize( size+100, size+100 );
}
}
class SquarePanel extends JPanel
{
FilledFrame theApp; // WHY DO WE CREATE A VARIABLE OF A TYPE CLASS? HERE?
SquarePanel(FilledFrame app)
{
theApp = app;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(20, 20, theApp.size, theApp.size);
}
}
答案 0 :(得分:0)
在FilledFrame构造函数中,我们要创建一个SquarePanel实例,但事实是SquarePanel构造函数需要一个FilledFrame实例,因此,因为我们已经在首先创建FilledFrame,所以可以发送正在构造的当前FilledFrame实例作为输入到SquarePanel构造函数。
答案 1 :(得分:0)
WHERE DOES (THIS) REFER AND WHY DO WE NEED IT?
this
代表该类的当前实例。
在这个例子中, JPanel 的构造函数需要一个 FilledFrame 类的实例。因此,我们传递了该实例,在本例中为
this
(在main方法中创建)。
WHY DO WE CREATE A VARIABLE OF A TYPE CLASS? HERE?
在您的设计中, SquarePanel 类取决于 FilledFrame 类,因此我们必须注入一个 FilledFrame 实例。 在您的情况下,可以将其作为参数传递给您的 SquarePanel 构造函数。