Некоторое время назад я задал следующий вопрос о размещении нескольких изображений в JFrame:
Можно ли создать JFrame с несколькими изображениями? .
Проблема в том, что: когда я перемещаю полосу прокрутки, чтобы увидеть изображения, я обнаружил, что она потребляет много памяти (около 1 МБ на каждый ролик прокрутки для всего кадра). Когда работа с одним и тем же JFrame возобновляется много раз (в моем случае около 100 раз), это становится проблемой.
Итак, мне нужна помощь для предотвращения высокого потребления памяти с помощью JFrames .
Я пытался сделать тот же экран, используя Frame , но он не работал вообще.
Спасибо.
PS: реализованный код относительно прост (он был сделан в Netbeans) и основан на правильном ответе на другой вопрос:
Примечание: painel
является подклассом JPanel
и рисует изображение в виде JPanel
.
ArrayList<painel> panels;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
/** Creates new form Frame */
public Frame() {
initComponents();
panels = new ArrayList<painel>();
this.setLocationRelativeTo(null);
}
// Load the images in the panel
public void loadImages(ArrayList<String> names) {
jPanel1.removeAll();
jScrollPane1.getVerticalScrollBar().setValue(0);
panels.clear();
for (String name : names) {
panels.add(new painel(name));
}
for (painel p : panels) {
jPanel1.add(p);
p.repaint();
}
jPanel1.updateUI();
}
// Generated By NetBeans
@SuppressWarnings("unchecked")
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jPanel1 = new javax.swing.JPanel();
jPanel1.setMinimumSize(new java.awt.Dimension(500, 7000));
jPanel1.setPreferredSize(new java.awt.Dimension(500, 7000));
jPanel1.setLayout(new javax.swing.BoxLayout(
jPanel1, javax.swing.BoxLayout.Y_AXIS));
jScrollPane1.setViewportView(jPanel1);
jScrollPane1.getVerticalScrollBar().setUnitIncrement(50);
javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addComponent(
jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 581, Short.MAX_VALUE));
layout.setVerticalGroup(layout.createParallelGroup(
javax.swing.GroupLayout.Alignment.LEADING).addComponent(
jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE));
pack();
}