我有一个名为survival的类,它包含main方法,初始化程序。不是将图形代码放在这个类中,而是如何将它移动到一个与生存分开的新类中?
这是Survival.java:
package survival;
import javax.swing.*;
public class Survival extends JFrame {
private static int applicationWidth = 1024;
private static int applicationHeight = 768;
public Survival() {
setTitle("Survival");
setResizable(false);
setSize(applicationWidth, applicationHeight);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Survival();
}
}
这是GraphicsDisplay.java:
package survival;
import java.awt.*;
import javax.swing.*;
public class GraphicsDisplay extends JPanel {
@Override public void paintComponent(Graphics g) {
g.fillOval(50, 50, 100, 100);
}
}
答案 0 :(得分:3)
您似乎只能在add()
构造函数中GraphicsDisplay
Survival
的实例。
...
setResizable(false);
add(new GraphicsDisplay());
setSize(applicationWidth, applicationHeight);
...
在这种情况下,GraphicsDisplay
充当隐式圆形模型的视图。您可以查看此example如何以Model–View–Controller模式分隔类。
由于GraphicsDisplay
是完全由您的程序呈现的自定义组件,因此请考虑覆盖getPreferredSize()
以定义面板的几何图形。然后封闭的框架可以使用pack()
,而不知道游戏中使用的其他显示面板。这个LissajousPanel
就是一个例子。
答案 1 :(得分:2)
您必须扩展JPanel(JComponent)并覆盖paintComponent(Graphics g)
方法。
例如,
public class MyPanel extends JPanel
{
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g); // suggestion of @kleopatra
}
}
答案 2 :(得分:0)
在构造函数中,将组件(JPanel)添加到容器(JFrame):
public Survival() {
setTitle("Survival");
setResizable(false);
setSize(applicationWidth, applicationHeight);
this.getContentPane().add( new GraphicsDisplay() );
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}