Java SWT中Canvas控件画图问题。
SWT用Canvas控件显示图片的时候,如果图片过大,就是说图片像素远远大于Canvas控件大小,想利用滑动条来实现查看整个图片,该如何做?郁闷了今天又用Scrolled...
SWT用Canvas控件显示图片的时候,如果图片过大,就是说图片像素远远大于Canvas控件大小,想利用滑动条来实现查看整个图片,该如何做?
郁闷了 今天又用ScrolledComposite做了一下还是不好使啊,还是之前那问题,来回拖动一下,图片就没了。
Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(600,600);
shell.setText("画布");
shell.setLayout(new FillLayout());
final ScrolledComposite sc1 = new ScrolledComposite(shell, SWT.H_SCROLL
| SWT.V_SCROLL | SWT.BORDER);
varCanvas = new Canvas(sc1,SWT.NONE);
sc1.setContent(varCanvas);
varCanvas.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
varCanvas.setSize(2000,2000); 展开
郁闷了 今天又用ScrolledComposite做了一下还是不好使啊,还是之前那问题,来回拖动一下,图片就没了。
Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(600,600);
shell.setText("画布");
shell.setLayout(new FillLayout());
final ScrolledComposite sc1 = new ScrolledComposite(shell, SWT.H_SCROLL
| SWT.V_SCROLL | SWT.BORDER);
varCanvas = new Canvas(sc1,SWT.NONE);
sc1.setContent(varCanvas);
varCanvas.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
varCanvas.setSize(2000,2000); 展开
2个回答
展开全部
没有用Canvas,因为不知道你所说的滑动条,具体是指什么。是不是JScrollPane的横纵滚动条。
JScrollPane + JPanel
可以实现,下边是代码。
--------------------------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class LineAppFrame extends JFrame {
public LineAppFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(550, 550);
setLocationRelativeTo(null);
JScrollPane scrollPane = new JScrollPane();
MyCanvas panel = new MyCanvas();
panel.setPreferredSize(new Dimension(panel.width, panel.height));
scrollPane.setViewportView(panel);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
public static void main(String[] args) {
new LineAppFrame();
}
}
class MyCanvas extends JPanel {
int width = 0;
int height = 0;
private ImageIcon icon;
public MyCanvas() {
icon = new ImageIcon("D:\\2.jpg");
width = icon.getIconWidth();
height = icon.getIconHeight();
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(icon.getImage(), 0, 0, null);
}
}
JScrollPane + JPanel
可以实现,下边是代码。
--------------------------------------------------------------------------------
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class LineAppFrame extends JFrame {
public LineAppFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(550, 550);
setLocationRelativeTo(null);
JScrollPane scrollPane = new JScrollPane();
MyCanvas panel = new MyCanvas();
panel.setPreferredSize(new Dimension(panel.width, panel.height));
scrollPane.setViewportView(panel);
getContentPane().add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
public static void main(String[] args) {
new LineAppFrame();
}
}
class MyCanvas extends JPanel {
int width = 0;
int height = 0;
private ImageIcon icon;
public MyCanvas() {
icon = new ImageIcon("D:\\2.jpg");
width = icon.getIconWidth();
height = icon.getIconHeight();
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(icon.getImage(), 0, 0, null);
}
}
更多追问追答
追问
Canvas Canvas= new Canvas(shell,SWT.H_SCROLL | SWT.V_SCROLL);
我做的是SWT/JACE的应用,原本想的时候Canvas控件有滚动条的属性,如上设置属性后就可以用滑动条显示了,结果不行。
追答
你的这个Canvas是
import java.awt.Canvas;这个吗?
我怎么没有你给出的构造方法?
展开全部
搞定没?同志!!你这代码给的也不清楚,不知道你用的什么方法进行绘图,他有个PaintListener的监听器,你在这个监听里写入你的绘图方法
e.gc.drawImage(new Image(Display.getCurrent(), new FileInputStream(new File("D://Winter.jpg"))), 0, 0);
但是注意,这个只是在起点绘画,所以应该要计算滑动条滚动后,图出现位置,具体我没有研究,你可以看看这个,也许有启示
http://wenku.baidu.com/view/6ce9e1f49e3143323968939e.html
e.gc.drawImage(new Image(Display.getCurrent(), new FileInputStream(new File("D://Winter.jpg"))), 0, 0);
但是注意,这个只是在起点绘画,所以应该要计算滑动条滚动后,图出现位置,具体我没有研究,你可以看看这个,也许有启示
http://wenku.baidu.com/view/6ce9e1f49e3143323968939e.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询