提问者:小点点

拖动时滚动


所以我有几个问题:1)这段代码可以吗?还是可以写得更好?(我将在最终版本中有一个带有图片的数组) 2)当我单击下一步按钮时,我在第一张图片上绘制的矩形停留在第二张图片上,如何清除它?所以按下下一步按钮后,新图片上没有矩形?3)我希望能够在拖动鼠标按钮时自动滚动(在绘制矩形时),但它并没有真正起作用......请帮忙

 public class SelectionExample {

     static public TestPane panelek;
     static public BufferedImage tempimage;



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

    public SelectionExample() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BorderLayout());
                panelek = new TestPane();
               panelek.setPreferredSize(new Dimension(100, 100));
                panelek.setAutoscrolls(true);
                JScrollPane scrollPane = new JScrollPane(panelek);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);


                frame.add(scrollPane, BorderLayout.CENTER);
                JButton next = new JButton("NEXT");
                frame.add(next, BorderLayout.PAGE_START);


                try {
                    tempimage = ImageIO.read(new File("D:/test/temp1.jpg"));
                } catch (IOException ex) {
                    Logger.getLogger(SelectionExample.class.getName()).log(Level.SEVERE, null, ex);
                }


                next.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e)
            {
                 try {
                    tempimage = ImageIO.read(new File("D:/test/temp2.jpg"));
                } catch (IOException ex) {
                    Logger.getLogger(SelectionExample.class.getName()).log(Level.SEVERE, null, ex);
                }
           panelek.repaint();


            }
        });      



                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);



            }
        });
    }










}

共1个答案

匿名用户

这段代码可以吗?还是可以写得更好?

不要使用静态变量。如果要更改面板上的图像,则需要在类中创建 setImage(...) 方法。然后,该方法将保存图像并调用 repaint()。也就是说,类应该负责管理它们的属性并提供 getter/setter 方法。

代码的格式很糟糕,因此难以阅读。使用制表符或空格进行代码缩进并保持一致。

我希望能够在拖动鼠标按钮时自动滚动

读取 JComponent 类的 setAutoScrolls(...) 方法的 API。它为 MouseMotionListermouseDragged(...) 方法提供了代码。