【问题标题】:Why doesn't my 2nd shape appear in my JAVA program using awt?为什么我的第二个形状没有出现在我使用 awt 的 JAVA 程序中?
【发布时间】:2020-06-12 22:02:08
【问题描述】:
public class Pong {

    private static final int ICON_HEIGHT = 400;
    private static final int ICON_WIDTH = 400;
    private static final int PADDLE_WIDTH = 100;

    public static void main(String[] args) {

        JFrame frame = new JFrame();

        final MoveableShape SHAPE = new Paddle(15, 0, PADDLE_WIDTH);
        final MoveableShape SHAPE2 = new Paddle(50, 50, PADDLE_WIDTH);

        IconShape icon = new IconShape(SHAPE, ICON_WIDTH, ICON_HEIGHT);
        IconShape icon2 = new IconShape(SHAPE2, ICON_WIDTH, ICON_HEIGHT);

        final JLabel label = new JLabel(icon);
        final JLabel label2 = new JLabel(icon2);

        frame.setLayout(new FlowLayout());
        frame.getContentPane().setBackground( Color.black );
        frame.add(label,label2);
        frame.setSize(400,400);
        frame.setVisible(true);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final  int DELAY = 50;

        Timer t = new Timer(DELAY, actionEvent -> {
            SHAPE.translate(0, 1);
            SHAPE2.translate(0,1);
            label.repaint();
            label2.repaint();
        });

        t.start();
    }
}

Shape 在屏幕上显示为一个白色矩形,基本上我希望在屏幕的另一侧出现第二个 Shape 实例,就像在 Pong 中一样,但由于某种原因,Shape2 不会出现在框架中。任何想法为什么会这样?我对awt很陌生。

【问题讨论】:

标签: java swing oop


【解决方案1】:
frame.setLayout(new FlowLayout());
frame.add(label,label2);

好吧,您使用的是 FlowLayout,因此这两个组件应该并排显示。

final MoveableShape SHAPE = new Paddle(15, 0, PADDLE_WIDTH);
final MoveableShape SHAPE2 = new Paddle(50, 50, PADDLE_WIDTH);

IconShape icon = new IconShape(SHAPE, ICON_WIDTH, ICON_HEIGHT);
IconShape icon2 = new IconShape(SHAPE2, ICON_WIDTH, ICON_HEIGHT);

但是,您似乎也在进行自定义绘画。所以你的自定义绘画是错误的。自定义绘制始终相对于组件的 (0, 0) 完成,而不是相对于您将组件添加到的面板。

这是我的猜测,因为您为第二个形状指定了 (50, 50...),它被绘制在图标大小之外,因此您看不到这幅画。由于 (15, 0...) 适用于您的第一个图标,请尝试这些值。

这应该可以解决您的第一个问题。

然而,更大的问题是布局管理器将控制组件的位置,而不是您的应用程序。因此,您确实需要重新设计代码来对所有对象进行自定义绘制,以便您可以完全控制每个对象的位置。

通过阅读 Custom Painting 上的 Swing 教程中的部分示例,从自定义绘画基础开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多