所以我有几个问题: 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);
}
});
}
}
答案 0 :(得分:1)
这段代码好吗?还是可以写得更好?
不要使用静态变量。如果您想更改面板上的图像,则需要在班级中创建setImage(...)
方法。然后该方法将保存图像并调用repaint()。这就是类应该负责管理它们的属性并提供getter / setter方法。
您的代码格式很糟糕,因此难以阅读。使用制表符或空格进行代码缩进并保持一致。
我希望能够在拖动鼠标按钮时自动滚动
阅读setAutoScrolls(...)
类的JComponent
方法的API。它为mouseDragged(...)
MouseMotionLister.
方法提供代码