【问题标题】:Weird BoxLayout painting奇怪的盒子布局画
【发布时间】:2020-08-05 05:59:18
【问题描述】:

我试图逐行破坏一个对象,其中每一行都是一个对象。然后我使用了一个盒子布局,但是当我这样做时,只绘制了顶层(这是最后一个调用的对象)我怎么能看到这个?

这是一个最小的例子:


import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {
        MainFrame frame = new MainFrame();
    }

}

private class MainFrame extends JFrame {

    public MainFrame(){
        setSize(600,400);
        setLocationRelativeTo(null);
        setVisible(true);
        setContentPane(new Container());
    }

}
private class Container extends JPanel {

    public Container(){
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));

        for(int i =0;i<10;i++){
            add(new Line());
        }

    }

}

private class Line extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.green);

        g.fillRect(getX(),getY(),getWidth(),getHeight());
    }
}

这是我所拥有的:

和我的预期:

一些测试(JBackPannel 类的 paint 方法中的蓝色矩形)显示某处某处正在绘制白色画布,但我不知道在哪里以及为什么...

这是minimal exemple的链接

【问题讨论】:

  • 1) 为了获得更好的帮助,请尽快发布正确的minimal reproducible example,当前代码不完整。缺少PerforationLine 类(但不要只添加该代码,而只需创建一个具有BoxLayout 并尝试绘制它的程序。2)应通过覆盖paintComponent(...) 而不是@ 来完成自定义绘制987654330@ 和 3)你不应该打破油漆链(即删除 super.paintComponent(...)) 4)另外,你为什么叫你的班级 JSomething
  • @Frakcool 好的,可以在最小的可复制示例上工作,并从 paint 更改为 paintCompenent 并回答 4):只是因为我需要以清晰的方式命名我的视图类,然后我我正在使用摇摆,所有摇摆类都是 Jsomething 然后调用我的类 JSomething 如果你有更好的想法,我会得到更清晰和最好的想法
  • 你已经知道你在使用 Swing,这是框架的约定,你的类不需要遵循那个约定,它实际上使它更加混乱,因为现在你不知道是否这样JLine 或属于 Swing 框架的任何类或您自己的代码(即使您知道大多数框架类,也可能有些东西您不知道并让您感到困惑)
  • 最小的例子应该是你的问题的edit,代码应该在问题中,而不是在外部站点中。我公司的网络设置不允许我访问您将代码发布到的站点。代码应作为代码格式的文本发布在问题中,而不是在外部网站或图像中
  • 在您的 Line 类中,fillRect 与该类相关,而不是父 JPanel。 X 和 Y 都应该为零。

标签: java swing


【解决方案1】:

自定义绘制总是相对于组件完成,而不是父面板中的组件位置。

所以:

g.fillRect(getX(),getY(),getWidth(),getHeight());

应该是:

g.fillRect(0, 0, getWidth(), getHeight());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多