我试图制作一个有很多元素的绘图,但它们都不适合屏幕的高度。所以我决定使用滚动条来绘制我的元素,用户只需向下滚动即可。但是,即使元素保持绘制,滚动条也不会滚动。我尝试设置首选大小,但滚动条从未根据绘图数量重新调整。无论如何都要动态调整滚动条的大小:
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);
}
}
答案 0 :(得分:0)
Swing有时并不真正接受竞争对手的规模。这是因为大多数布局管理员都会忽略它们。我建议在视口中尝试其他布局管理器,但我不确定。
答案 1 :(得分:0)
你没有说明你在哪里绘制元素,但我假设它在arr
。确保它延伸d
并设置JPanel
的preferredSize,而不是sg
,因为它会限制元素的空间和那里不会滚动。
此外,它只会在图纸占据d
的空格时滚动,因此将每个图片放在Components
或JLabel
中会更好。
Ps。:如果您要动态添加图纸,则应使用JPanel
中的invokeLater()
,以确保您与Swing的线程同步。否则,每次制作图纸时都需要致电SwingUtilities
。