JScrollBar调整图纸大小

时间:2016-01-25 16:10:40

标签: java swing scrollbar

我试图制作一个有很多元素的绘图,但它们都不适合屏幕的高度。所以我决定使用滚动条来绘制我的元素,用户只需向下滚动即可。但是,即使元素保持绘制,滚动条也不会滚动。我尝试设置首选大小,但滚动条从未根据绘图数量重新调整。无论如何都要动态调整滚动条的大小:

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawBus(3, g);
    drawDff(g, 4);
    for(int a = 0; a<35; a++){
    drawAndGate("!AB!CD", g, a);
    this.setPreferredSize(screenSize);
    }
}


 public void drawAndGate(String input , Graphics orGfx, int numFF){
            orGfx.setColor(Color.black);
            orGfx.drawLine(400, 50 + (numFF*40), 400, 80 + (numFF*40));
            orGfx.drawLine(400, 50 + (numFF*40),420, 50 + (numFF*40));
            orGfx.drawLine(400, 80 + (numFF*40),420, 80 + (numFF*40));
            orGfx.drawArc(400, 50 + (numFF*40), 40,30, 270,180);
            orGfx.drawLine(400, 50 + (numFF*40) + 20, 0, 50 + ((numFF*40) +    20));
            orGfx.drawString(input, 400 - (input.length()*10), 50 + (numFF*40)+15);
            for(int a = 0; a < input.length(); a++){
                if(input.charAt(a) == '!'){                    
                    orGfx.fillOval((40 * 2*((int)input.charAt(a+1) - 64) - 5),50 + (numFF*40) + 15,10,10);
                    System.out.println((int)input.charAt(a+1) - 64);
                    a = a + 1;
                }
                else{
                orGfx.fillOval(40 + (40 *((int)input.charAt(a) - 64) - 5),50 + (numFF*40) + 15,10,10);
                }

            }
}

public static void main(String[] args) {
    draw3 d = new draw3(Color.white);
    d.setPreferredSize(new Dimension(800,800));
    JScrollPane  sg = new JScrollPane(d,VERTICAL_SCROLLBAR_ALWAYS,HORIZONTAL_SCROLLBAR_ALWAYS);

    JFrame j = new JFrame();
    j.setBackground(Color.white);
    j.setSize(400, 400);
    j.setExtendedState(JFrame.MAXIMIZED_BOTH);
    j.add(sg);
    j.setTitle("Circuit");
    j.pack();
    j.setVisible(true);
    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

2 个答案:

答案 0 :(得分:0)

Swing有时并不真正接受竞争对手的规模。这是因为大多数布局管理员都会忽略它们。我建议在视口中尝试其他布局管理器,但我不确定。

答案 1 :(得分:0)

你没有说明你在哪里绘制元素,但我假设它在arr。确保它延伸d并设置JPanel的preferredSize,而不是sg,因为它会限制元素的空间和那里不会滚动。

此外,它只会在图纸占据d的空格时滚动,因此将每个图片放在ComponentsJLabel中会更好。

Ps。:如果您要动态添加图纸,则应使用JPanel中的invokeLater(),以确保您与Swing的线程同步。否则,每次制作图纸时都需要致电SwingUtilities