Java swing,滚动条不使用绝对布局

Java swing,滚动条不使用绝对布局,java,swing,jpanel,jscrollpane,absolutelayout,Java,Swing,Jpanel,Jscrollpane,Absolutelayout,我想要一个在jscrollpane中没有布局管理器的固定大小的jpanel(也将没有布局管理器)。我不能使用任何布局管理器,因为我需要在用户单击的位置创建一个矩形/圆形(并允许对所有创建的eMelent进行拖放) setLocationRelativeTo(空); 设置大小(300300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setName(“dnd测试”); int v=ScrollPaneConstants.VERTICAL\u

我想要一个在jscrollpane中没有布局管理器的固定大小的jpanel(也将没有布局管理器)。我不能使用任何布局管理器,因为我需要在用户单击的位置创建一个矩形/圆形(并允许对所有创建的eMelent进行拖放)

setLocationRelativeTo(空);
设置大小(300300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setName(“dnd测试”);
int v=ScrollPaneConstants.VERTICAL\u SCROLLBAR\u(根据需要);
int h=ScrollPaneConstants.HORIZONTAL\u SCROLLBAR\u(根据需要);
JScrollPane scroll=新的JScrollPane(面板,v,h);
scroll.setLayout(空);
scroll.setPreferredSize(新维度(10001000));
滚动.后退(0,0,1000,1000);
panel=buildComponentOnAbsoluteLayout(新JPanel(),滚动,0,0500500);
面板.立根背景(颜色.暗灰色);
面板设置尺寸(350350);
panel.setLayout(空);
buildComponentOnAbsoluteLayout(新的JButton(“按钮1”),面板,10,10120,30);
buildComponentOnAbsoluteLayout(新JButton(“按钮1”),面板,50,50120,30);
添加(滚动);
setVisible(真);
公共静态T构建组件AbsoluteLayout(T、容器支架、整数x、整数y、整数宽度、整数高度){
t、 立根(x、y、宽度、高度);
增加(t);
返回t;
}
滚动条永远不会弹出

我不能使用任何布局管理器,因为我需要在用户单击的位置创建一个矩形/圆形(并允许对所有创建的eMelent进行拖放)

当然,您不能使用JDK中的标准布局管理器,但是您应该使用布局管理器,因为布局管理器不仅仅是设置组件的位置

滚动条永远不会弹出

您的滚动不起作用,因为根据添加到面板的组件,面板没有合适的首选大小


请查看,它是为此目的而设计的布局管理器。它允许随机放置,但仍会计算出一个首选大小,因此滚动将起作用。

Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或者与布局填充和边框一起使用。我不能使用布局管理器。我正在尝试编写一个工具,它非常类似于一些图形化的uml/er建模工具,基本上用户可以在工作空间(jpanel)上创建对象,将对象连接到其他对象等等。这不是问题。实现拖放功能,并将组件动态添加到要使用的任何布局管理器中。如果使用空布局,它可能无法工作。要绘制形状,请使用与布局无关的图形对象。“我不能使用布局管理器”用于布局容器的任何逻辑都可以在自定义布局中进行编码..而且您已经证明,没有布局管理器就无法工作。
    setLocationRelativeTo(null);
    setSize(300,300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setName("dnd test");


    int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
    int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;


    JScrollPane scroll = new JScrollPane(panel,v,h);
    scroll.setLayout(null);
    scroll.setPreferredSize(new Dimension(1000, 1000));
    scroll.setBounds(0, 0, 1000, 1000);
    panel = buildComponentOnAbsoluteLayout(new JPanel(),scroll,0,0,500,500);
    panel.setBackground(Color.darkGray);
    panel.setSize(350,350);
    panel.setLayout(null);
    buildComponentOnAbsoluteLayout(new JButton("button 1"),panel,10,10,120,30);
    buildComponentOnAbsoluteLayout(new JButton("button 1"),panel,50,50,120,30);

    add(scroll);
    setVisible(true);

    public static  <T extends JComponent> T buildComponentOnAbsoluteLayout(T t,Container holder,int x, int y,int width, int heigth){
        t.setBounds(x,y,width,heigth);
        holder.add(t);
    return t;
}