拖动时滚动java

时间:2016-03-06 23:32:04

标签: java swing

所以我有几个问题: 1)这段代码好吗?还是可以写得更好? (我将在最终版本中有一个带有图片的数组) 2)当我单击“下一步”按钮时,我在第一张图片上绘制的矩形保留在第二张图片上,如何清除它?所以按下Next按钮后新图片上没有矩形? 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 个答案:

答案 0 :(得分:1)

  

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

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

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

  

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

阅读setAutoScrolls(...)类的JComponent方法的API。它为mouseDragged(...)

MouseMotionLister.方法提供代码