線、円、長方形などの非常に単純なグラフィックを描画するクラスがあります。線は動的に拡張可能であり、解像度を超えて拡張すると、スクロールバーなしでは表示できない場合があります。そのため、JFrameにJScrollPaneを追加しましたが、残念ながら、レイアウトマネージャーを既に呼び出しているにもかかわらず、スクロールバーはスクロールできません。
私が持っているものは次のとおりです。-コンポーネント(線、長方形、円)を描画するクラス-JFrame/JScrollPaneを設定するクラス
これが私のGUIクラスの抜粋コードです:
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を含むスクロールペインを備えたJFrameを表示させることができます。スクロールバーを常に上記のように表示するように設定しましたが、スクロールできず、灰色で表示されます。
Andrewが提案したように、私は自分がやろうとしていることを反映する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に追加しましたが、スクロールできません。