当框架中有两个 JPanel 时在一个 JPanel 上绘画
Painting on one JPanel when two are in the frame
我的 GUI 程序主 JFrame 中有两个 JPanel。一个是菜单,另一个应该显示一些图形,然后是动画。我正在尝试在后一个面板内部绘制。
我使用的是 intelliJ 的网格布局管理器,这让我很难找到代码的放置位置。
我是 Java 的新手,因此非常感谢任何有关如何在 AnimationPanel 上绘画的帮助。
这是我目前的尝试 -
主要Class:
public class ProjectileSim {
public static void main(String[] args){
GUIForm1 gui = new GUIForm1();
AnimationPanel animationPanel = new AnimationPanel();
}
}
动画面板Class:
public class AnimationPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//axis
g.setColor(Color.BLACK);
g.fillRect(50, 0, 5, getHeight());
g.fillRect(0, getHeight() - 50, getWidth(), 5);
int axisY = 0;
int axisX = 0;
int axisYCounter = 1;
int axisXCounter = 1;
//axis markers
while (axisYCounter <= getHeight() / 10) {
g.fillRect(35, axisY, 20, 5);
axisY = axisY + 50;
axisYCounter++;
}
while (axisXCounter <= getWidth() / 10) {
g.fillRect(axisX, getHeight() - 50, 5, 20);
axisX = axisX + 50;
axisXCounter++;
}
}
}
GUIForm1 Class:(省略了很多,因为它主要与菜单相关)
public class GUIForm1 {
private JPanel MainPanel;
private JPanel MenuPanel;
private JPanel AnimationPanel;
public GUIForm1() {
JFrame frame = new JFrame("Projectile Motion");
frame.setContentPane(MainPanel);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.pack();
frame.setVisible(true);
您用 MainPanel 覆盖了 AnimationPanel。我评论了这一行:
frame.setContentPane(MainPanel);
我看到了你的画。
记得按以下方式将 AnimationPanel 放在框架上:
frame.setContentPane(AnimationPanel);
或其他方法(使用布局)
我的 GUI 程序主 JFrame 中有两个 JPanel。一个是菜单,另一个应该显示一些图形,然后是动画。我正在尝试在后一个面板内部绘制。
我使用的是 intelliJ 的网格布局管理器,这让我很难找到代码的放置位置。
我是 Java 的新手,因此非常感谢任何有关如何在 AnimationPanel 上绘画的帮助。
这是我目前的尝试 -
主要Class:
public class ProjectileSim {
public static void main(String[] args){
GUIForm1 gui = new GUIForm1();
AnimationPanel animationPanel = new AnimationPanel();
}
}
动画面板Class:
public class AnimationPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
//axis
g.setColor(Color.BLACK);
g.fillRect(50, 0, 5, getHeight());
g.fillRect(0, getHeight() - 50, getWidth(), 5);
int axisY = 0;
int axisX = 0;
int axisYCounter = 1;
int axisXCounter = 1;
//axis markers
while (axisYCounter <= getHeight() / 10) {
g.fillRect(35, axisY, 20, 5);
axisY = axisY + 50;
axisYCounter++;
}
while (axisXCounter <= getWidth() / 10) {
g.fillRect(axisX, getHeight() - 50, 5, 20);
axisX = axisX + 50;
axisXCounter++;
}
}
}
GUIForm1 Class:(省略了很多,因为它主要与菜单相关)
public class GUIForm1 {
private JPanel MainPanel;
private JPanel MenuPanel;
private JPanel AnimationPanel;
public GUIForm1() {
JFrame frame = new JFrame("Projectile Motion");
frame.setContentPane(MainPanel);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setExtendedState(Frame.MAXIMIZED_BOTH);
frame.pack();
frame.setVisible(true);
您用 MainPanel 覆盖了 AnimationPanel。我评论了这一行:
frame.setContentPane(MainPanel);
我看到了你的画。
记得按以下方式将 AnimationPanel 放在框架上:
frame.setContentPane(AnimationPanel);
或其他方法(使用布局)