【问题标题】:java scrolling while draggingjava在拖动时滚动
【发布时间】:2016-03-09 06:13:13
【问题描述】:

所以我有几个问题: 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);



            }
        });
    }










}

【问题讨论】:

  • 矩形是由您的paintComponent 根据selection 的值绘制的,因此当您移至下一张图像时,您可能需要清除/重置这些值
  • 拖拽JScrollPaneexample
  • 嗨,所以在下一个按钮的动作监听器中,我应该将所有选择值设置为 0 吗?我刚刚用 JscrollPane 检查了这段代码,但它没有帮助....我可以在鼠标移动时在图片中移动,问题是我无法同时绘制矩形并在图片中移动... .
  • 好的,那么你认为你可以如何让它发挥作用?当您想绘制一个选择矩形时,您如何告诉JScrollPane 不是“拖动”?或者你想两者都做?至于矩形清除,我会在您的面板中有一个方法,可能称为 clearSelection 这样做
  • 我想要的是:如果图片太大而无法在面板上显示我想要滚动 - 我有它,但是当我开始绘制矩形时,我会说右边(当前视图结束)但我仍在拖动我想要自动滚动到右侧。所以当前视图(部分图片)移动我希望你理解

标签: java swing


【解决方案1】:

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

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

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

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

读取JComponent 类的setAutoScrolls(...) 方法的API。它为您的MouseMotionLister.mouseDragged(...) 方法提供代码

【讨论】:

  • 嗨,谢谢帮助,我将尝试在 TestPane 类中实现它,这样就不会有任何静态变量。关于这个 JscrollPane - 它有效,我可以拖动鼠标并在图片周围移动,但我不能同时绘制矩形并在图片周围移动(如果图片太大而无法显示在面板上)。
猜你喜欢
  • 2023-03-16
  • 2012-08-31
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
相关资源
最近更新 更多