我想使用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);
}
});
}
}发布于 2012-07-31 21:28:45
你的代码中有很多错误。它需要全面的重新思考。
我只给你一些基本的提示:
当你使用一个不设置监听器的ImagePanel构造器时(注意NullPointerException);
paintComponent上你只是按原样绘制图像;
width和height,并且你试图在paintComponent中重置它们-这不是你应该做的。提示:有一个Graphics类的方法:必须在EDT:
上创建和更改g.drawImage(image, x, y, width, height, this);;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
//etc.
}
});
}https://stackoverflow.com/questions/11740002
复制相似问题