我有一個類可以繪製線條,圓形和矩形等非常簡單的圖形。這些行是動態可擴展的,有時當它們擴展超出分辨率時,沒有滾動條是不可能看到的。因此,我已經將JScrollPane添加到了我的JFrame中,但不幸的是,儘管已經調用了佈局管理器,但滾動條並不是可滾動的。JScrollPane滾動條不可滾動
這是我有: - 繪製組件(直線,矩形,圓)類 - 即樹立的JFrame/JScrollPane的
這裏是我的GUI類的摘錄代碼A類:
JFrame frame = new JFrame("GUIFrame");
frame.setLayout(new BorderLayout()); // Layout already set
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DrawComponent comp = new DrawComponent(); // Reference to class that draw components
JScrollPane sp = new JScrollPane(comp, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
sp.setPreferredSize(new Dimension(1000, 1000));
frame.add(sp, BorderLayout.CENTER);
frame.setSize(500,500);
frame.setVisible(true);
隨着上面的代碼,我有Java向我展示了一個帶有包含我的jcomponents的scrollpane的JFrame。我已經將滾動條設置爲始終如上所示,但它們不可滾動,灰色。
至於建議由安德魯,我花了一段時間來創建一個SSCCE反映我想要做的事:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import java.util.Random;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
public class DrawTest {
public static void main(String[] args){
JFrame frame = new JFrame("SSCCE");
frame.setLayout(new BorderLayout());
frame.setSize(1000, 1000);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DrawComp d = new DrawComp();
JScrollPane sp = new JScrollPane(d, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
frame.add(sp);
frame.setVisible(true);
}
}
class DrawComp extends JComponent {
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
Random ran = new Random();
int ranNum = ran.nextInt(10);
System.out.println(ranNum);
double length = 100 * ranNum;
g2.draw(new Line2D.Double(10, 10, length, length));
}
}
上面的代碼繪製基於隨機輸入的對角線。我打算做的事情是,當線條變得太長以至於超出幀尺寸時,我希望能夠滾動並查看整個線條。我再次將行組件添加到JScrollPane,但它不能滾動。
1)爲了更好地幫助您,請發佈[SSCCE](http://sscce.org/ )。 2)'comp.setPreferredSize(new Dimension(1000,1000)); sp.validate(); (新維度(1000,1000));'3)'frame.pack();' –
我想你需要看看[如何使用滾動窗格](http:// docs。 oracle.com/javase/tutorial/uiswing/components/scrollpane.html)以更好地理解它們的工作方式。 'sp.setPreferredSize(new Dimension(1000,1000));'不會影響可滾動區域,但會影響組件的大小。 'ViewPort'負責確定可滾動區域(至少從你試圖實現的角度來看) – MadProgrammer
感謝你的幫助,但我的印象是不鼓勵使用setPreferredSize? –