当前位置: 首页 > 知识库问答 >
问题:

我怎么能置身其中呢?

牧信厚
2023-03-14

我试着用Java画一个长方形。我设置框架大小(800400)和可调整大小(假)矩形的x=50,y=50宽度=700高度=300。为什么不在中间呢?非常感谢。

共有2个答案

卢知
2023-03-14
    Rectangle rect = new Rectangle(50,50,700,300); 

这应该很好,在访问成员变量之前是否创建了一个新的矩形实例

800乘400这是一种奇怪的分辨率,800乘600更标准。

滑文昌
2023-03-14

如果没有其他证据,我猜你已经覆盖了paint方法,比如JFrame并直接对其进行了绘制。

问题是,框架有装饰(例如边框和标题栏),这会占用框架内部的空间。。。

从技术上讲,这是正确的。长方形画在框架的中心,但由于框架的装饰,它看起来有点高。。。

相反,您应该在框架的内容区域上绘画。

在这里,矩形现在看起来正确居中。在我的测试中,我将第一个框架(坏)设置为800x400,我使第二个框架的内容窗格的首选尺寸为800x400,这使得框架的尺寸实际上为816x438,因为框架的装饰现在不在油漆区域内。

public class CenterOfFrame {

    public static void main(String[] args) {
        new CenterOfFrame();
    }

    public CenterOfFrame() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                new BadFrame().setVisible(true);

                JFrame goodFrame = new JFrame();
                goodFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                goodFrame.setContentPane(new PaintablePane());
                goodFrame.pack();
                goodFrame.setLocationRelativeTo(null);
                goodFrame.setVisible(true);

            }
        });
    }

    public class BadFrame extends JFrame {

        public BadFrame() {
            setSize(800, 400);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
        }

        @Override
        public void paint(Graphics g) {
            super.paint(g);
            paintTest(g, getWidth() - 1, getHeight() - 1);
        }
    }

    public void paintTest(Graphics g, int width, int height) {
        g.setColor(Color.RED);
        g.drawLine(0, 0, width, height);
        g.drawLine(width, 0, 0, height);
        g.drawRect(50, 50, width - 100, height - 100);
    }

    public class PaintablePane extends JPanel {

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(800, 400);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
            paintTest(g, getWidth() - 1, getHeight() - 1);
        }
    }
}

这就是为什么不应该覆盖顶层容器的paint方法的原因之一;)

 类似资料:
  • 我正在使用C 11和stl线程编写线程安全队列。WaitAndPop方法目前如下所示。我希望能够向WaitAndPop传递一些指示调用线程是否已被要求停止的东西。WaitAndPop如果等待并返回队列的一个元素,则应返回true,如果调用线程被停止,则应返回false。 有可能编写这样的代码吗?我习惯了Win32 WaitForMultipleObject,但找不到适用于这种情况的替代方案。 谢谢

  • 我正在为学校的javascript入门课程做作业。我的概念是一种植物,当你给它浇水时它会生长,当它在x时间后没有水时它会变小。给植物加水使其生长是有效的,但我很难弄清楚如何使其在x时间内收缩。我被告知把它放在一个循环中,然后加上setInterval,但我是一个noob,所以我真的不知道该怎么办。此外,代码是荷兰语! 谢谢你抽出时间来帮助我!! 超文本标记语言 JAVASCRIPT:

  • 我试图在我的Pdf文档上设置我的文本,但这不起作用。我怎么能通过iText7设置我的字体卡里布里?字体常量类只有有限的字体。

  • 最近我在做反平工作人员的功能。我的代码是: 但今天我注意到,如果我在#公告中ping@Everyone,它会注意到我ping了staff。那么,如何才能为特定渠道破例呢?我必须在这段代码中添加什么?

  • 谢谢你的回应。我检查了位置,它被标识为与ANDROID_SDK_HOME环境路径相同的位置。它仍然说根是未定义的。我创建了一个到相同位置的ANDROID_SDK_ROOT环境路径,但它仍然没有定义。