gpt4 book ai didi

java - 使用 JScrollPane 的 JApplet 滚动条显示但不滚动屏幕外的 Graphics2D 内容

转载 作者:行者123 更新时间:2023-12-01 16:58:53 25 4
gpt4 key购买 nike

我正在尝试向 JApplet 组件添加滚动条。我知道我不应该使用它,而应该使用 JPanel,但为了简单起见,我将保留它,就像我正在遵循的教程中一样。

如您所见,我尝试添加 ScrollPane 组件,并向其中添加小程序。然后我将滚动 Pane 添加到框架中。

结果是我可以看到一个垂直滚动条,但它确实具有滚动的能力。实际上滚动光标丢失了。并且向上和向下箭头也不会滚动。我想向下滚动到我所绘制的线条中超出可见区域的部分。

我做错了什么?

public class App {

private App() {
final int WINHSIZE = 800;
final int WINVSIZE = 600;

class MyJApplet extends JApplet {

public void init() {
setBackground(Color.black);
setForeground(Color.white);
}

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.drawLine(0, 0, 2000, 2000);
}
}
}


JFrame f = new JFrame("Title");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

JApplet applet = new MyJApplet();
JScrollPane myScrollPane = new JScrollPane(applet, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

f.getContentPane().add("Center", myScrollPane);
applet.init();
f.pack();
f.setSize(new Dimension(WINHSIZE, WINVSIZE));
f.setVisible(true);

}


public static void main(String[] args) {
new App();
}
}

最佳答案

I'll leave it like it, as in a tutorial I am following.

嗯,你的教程很旧,你不应该遵循它。相反,您应该学习如何以正常方式创建 JFrame。

也就是说,您通过重写 paintComponent() 方法在 JPanel 上进行自定义绘制,并将面板添加到框架中。你不应该重写paint()。阅读 Custom Painting 上的 Swing 教程(这是一个更好的教程)中的部分。了解更多信息。您需要确保重写 getPreferredSize() 方法,以便滚动条可以正常工作。

f.getContentPane().add("Center", myScrollPane);

这不是将组件添加到容器的方式。你永远不会硬编码这样的约束。您还应该使用:

 add(component, constraint)

BorderLayout 将包含可用于识别约束的字段。

人们不再使用f.getContentPane().add(...)。从 JDK4 开始,您可以使用 f.add(...)。正如我所说,您的教程已经过时了。

查看 Swing 教程的目录。这些示例更新了,将为您的应用程序提供更好的设计。例如,您应该在事件调度线程上创建 GUI 组件,而您的代码并未执行此操作。阅读有关并发的教程,了解为什么这很重要。

关于java - 使用 JScrollPane 的 JApplet 滚动条显示但不滚动屏幕外的 Graphics2D 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29324522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com