一个关于JScrollPane的简单问题,送分!!

rick111111 2004-06-21 10:56:24
想写一个Java 2D的程序, 画一个2000*2000的图,怎么通过滚动条把整个图显示出来啊显示出来啊?

...全文
165 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Znet 2004-07-02
  • 打赏
  • 举报
回复
this.setPreferredSize(new Dimension(2005,2005));

这句话不能去掉,否则就看不到全部的矩形了。
Znet 2004-07-02
  • 打赏
  • 举报
回复
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;

public class Test extends JFrame{
public Test(){
JPanel panel = new JPanel(){
{
this.setPreferredSize(new Dimension(2005,2005));
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
Rectangle2D rec = new Rectangle2D.Double(0,0,2000,2000);
g2.setPaint(Color.red);
g2.draw(rec);
}
};

Container con = this.getContentPane();
int v = JScrollPane.VERTICAL_SCROLLBAR_ALWAYS;
int h = JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS;
JScrollPane p = new JScrollPane(panel);
con.add(p,BorderLayout.CENTER);
}

public void show(){
this.setTitle("A big picture");
this.setSize(400,400);
super.show();
}

public static void main(String[] args){
new Test().show();
}
}

上面是我写的代码,已经测试过了。可以达到你要的效果。
你自己运行一下看看。
CsdnRob 2004-07-02
  • 打赏
  • 举报
回复
这样做可以 PaintPanel pp = new PaintPanel(); pp.setPreferredSize(new Dimension(2030, 2030)); JScrollPane sp = new JScrollPane(); sp.getViewport().add(pp); getContentPane().setLayout(new BorderLayout()); getContentPane().add(sp, BorderLayout.CENTER);
rick111111 2004-06-22
  • 打赏
  • 举报
回复
开始我可能没有问清楚, 不好意思, 现在有谁能帮我回答一下吗?
rick111111 2004-06-22
  • 打赏
  • 举报
回复
对不起, 我想知道的不是怎么把2000 * 2000 这么大的image显示出来, 而是怎么用java 2D画图, 然后通过滚动条把整个图片显示出来, 比如我在(2000, 2000)位置画一个Rectangel.Double(2000,2000,10,10), 然后要在程序中通过拖动滚动条看到这个矩形. 怎么做到呢?

我试过在JPanel的Paint函数中画图, 然后在JFrame的构造函数中加入JScrollPane, 但并没有出现滚动条, 比如我像下面这么做, 怎能看到我画出的矩形呢

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

public class VisualGraph extends JFrame{
PaintPanel paintPanel;

public VisualGraph(){
super("Visual Graph");

getContentPane().add(new JScrollPane(new PaintPanel()));

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(690,530);
setVisible(true);
}

public static void main(String[] args)
{
VisualGraph vg = new VisualGraph();
}

}

class PaintPanel extends JPanel{
public void paint(Graphics g){
super.paint(g);

Graphics2D g2D = ( Graphics2D ) g;

g2D.draw(new Rectangle.Double(100,100,10,10));
g2D.draw(new Rectangle.Double(2000,2000,10,10));
}
}

MyXin 2004-06-22
  • 打赏
  • 举报
回复
这样做可以

PaintPanel pp = new PaintPanel();
pp.setPreferredSize(new Dimension(2030, 2030));
JScrollPane sp = new JScrollPane();
sp.getViewport().add(pp);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(sp, BorderLayout.CENTER);


ssrrkk 2004-06-21
  • 打赏
  • 举报
回复
楼主,不好意思。借贵地问个问题,不知什么原因我不能发问。谢谢了

请问constants是什么意思?怎么用?
下面这两个又是什么意思?
Constants.ONE_SECOND
Constants.FIVE_SECONDS


谢谢了
hotyei 2004-06-21
  • 打赏
  • 举报
回复
没错,控件放进JScrollPane 就会自动滚动。
guojiafuzhuxi 2004-06-21
  • 打赏
  • 举报
回复
关注。。。。。。。。。。。。。。。。。
dilidilidi 2004-06-21
  • 打赏
  • 举报
回复
constants是常量的意思
HawaiiLeo 2004-06-21
  • 打赏
  • 举报
回复
1. 你先创建一个JScrollPane对象 JScrollPane js =new JscrollPane();
2. 把你乘放2000*2000的图的组件放到JScrollPane中 js.add(canvas);
3. 把JScrollPane 加入到窗体中 frame.contentPane().add(js);

JScrollPane 有两个构造方法:JScrollPane(), JScrollPane(component c)
nzcsnewbie 2004-06-21
  • 打赏
  • 举报
回复
对,JAVA SWING里,无论什么东西,都要放在CONTAINER里,如果想滚动,就必须要放在JSCROOLPANE 里.楼上的CODE是对的!
hooligan000112003 2004-06-21
  • 打赏
  • 举报
回复
把图片加在label上,然后用JScrollPane js =new JscrollPane(label)
this.contentPane().add(js)就行了
rick111111 2004-06-21
  • 打赏
  • 举报
回复
我的问题不算难吧, 自己顶一下!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧