Java 如何使用JScrollBar缩放图像?
我想使用Java 如何使用JScrollBar缩放图像?,java,image,swing,zooming,jscrollbar,Java,Image,Swing,Zooming,Jscrollbar,我想使用JScrollBar放大和缩小图像,但它不起作用。我的代码怎么了 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class piczoominandout extends JFrame { public JScrollBar scroll; public JLabel lbl; public Image image; public int x, y, width, he
JScrollBar
放大和缩小图像,但它不起作用。我的代码怎么了
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class piczoominandout extends JFrame
{
public JScrollBar scroll;
public JLabel lbl;
public Image image;
public int x, y, width, height;
public piczoominandout()
{
super("picture zoom");
Toolkit toolkit = Toolkit.getDefaultToolkit();
image = toolkit.getImage("Snake.jpg");
Container c = getContentPane();
ImagePanel imagePane = new ImagePanel(image);
c.setLayout(new BorderLayout());
lbl = new JLabel("0");
c.add(lbl, BorderLayout.SOUTH);
scroll = new JScrollBar(
JScrollBar.HORIZONTAL,50,10,0,100);
scroll.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(
AdjustmentEvent evt) {
JScrollBar s = (JScrollBar)evt.getSource();
if ( !s.getValueIsAdjusting() ) {
int v = (int)s.getValue();
width +=v;
height +=v;
repaint();
lbl.setText(Integer.toString(v));
}
} });
c.add(imagePane,BorderLayout.CENTER );
c.add(scroll, BorderLayout.NORTH);
}
class ImagePanel extends JPanel
{
public ImagePanel(Image img) { image = img;}
public void paintComponent(Graphics g)
{
Insets ins = getInsets();
super.paintComponent(g);
width = image.getWidth(this);
height = image.getHeight(this);
x = ins.left+5; y = ins.top+5;
g.drawImage(image,x,y,width,height,this);
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run()
{
piczoominandout frame = new piczoominandout();
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
frame.setSize(600,300);
frame.setVisible(true);
}
});
}
}
你的代码中有很多错误。它需要全面反思 我只给你一些基本的提示:
- 使用未设置侦听器的
构造函数(注意ImagePanel
)李>NullPointerException
- 您没有缩放图像-在
上,您只是按原样绘制图像李>paintComponent
- 您正在侦听器滚动值中添加
和宽度
,并尝试在高度
中重置它们-这不是您应该做的。提示:有一种画图组件
class的方法:Graphics
g.drawImage(image,x,y,width,height,this)代码>李>
- 必须在EDT上创建和更改每个Swing组件:
我更改了一些代码,然后我不知道该怎么办,你能再帮我一次吗?>
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
//etc.
}
});
}