简体   繁体   English

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

[英]Java swing, scrollbar does not working with absolute layout

I want to have a jpanel with fixed size without layout manager in jscrollpane (which will be also without layout manager). 我想在jscrollpane中有一个不带布局管理器的固定大小的jpanel(也将不带布局管理器)。 I cant use any layout manager because i need to create an rectangle/circle at a location where user clicks (and allow drag & drop for all the created emelents) 我不能使用任何布局管理器,因为我需要在用户单击的位置创建一个矩形/圆形(并允许拖放所有创建的润饰剂)

    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;
}

Scrollbar will never pop up. 滚动条将永远不会弹出。

I cant use any layout manager because i need to create an rectangle/circle at a location where user clicks (and allow drag & drop for all the created emelents) 我不能使用任何布局管理器,因为我需要在用户单击的位置创建一个矩形/圆形(并允许拖放所有创建的润饰剂)

Well, you can't use a standard layout manager from the JDK, but yes you SHOULD be using a layout manager because a layout manager does more than just set the location of a component. 好的,您不能使用JDK中的标准布局管理器,但是可以,您应该使用布局管理器,因为布局管理器不仅可以设置组件的位置。

Scrollbar will never pop up. 滚动条将永远不会弹出。

Your scrolling doesn't work because the panel doesn't have a proper preferred size based on the components added to the panel. 滚动不起作用,因为基于添加到面板的组件,面板没有合适的首选尺寸。

Check out the Drag Layout which is a layout manager designed for this purpose. 查看Drag Layout ,这是为此目的而设计的布局管理器。 It allows random placement but it still calculates a preferred size so scrolling will work. 它允许随机放置,但仍会计算首选大小,因此滚动将起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM