【发布时间】: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 都应该为零。