我有一个类可以绘制一些非常简单的图形,例如线条、圆形和矩形。线条是可动态扩展的,有时当它们超出分辨率时,如果没有滚动条就无法看到。因此,我已将 JScrollPane 添加到我的 JFrame 中,但不幸的是,尽管已经调用了布局管理器,但滚动条不可滚动。
这是我所拥有的: - 一个绘制组件(线、矩形、圆形)的类 - 一个设置 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 向我展示了一个带有滚动窗格的 JFrame,其中包含我的 jcomponents。我已将滚动条设置为始终如上所示显示,但它们不可滚动,呈灰色显示。
正如 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));
}
}
上面的代码根据随机输入绘制了一条对角线。我打算做的是,当行变得太长以至于超出框架大小时,我希望我能够滚动并查看整行。我再次将 line 组件添加到 JScrollPane 但它不能滚动。