2017-01-05 2 views
0

SCREENSHOTКак прокручивать мои JPanel

Я создаю список банковских движений с помощью следующего кода. pane - JPanel, а массив - ArrayList, который содержит данные о количестве и описании. Настройка - это маленький значок, который позволяет вам изменять каждое движение.

MouseClass - класс, который расширяет MouseAdapter, который я создал, чтобы добавить индекс «k» к методу mouseClicked. Я новичок в программировании java gui. Я хотел бы знать, если есть быстрый способ, чтобы добавить свиток к моей панели

JLabel[] movement = new JLabel[array.size()]; 
    JLabel[] description = new JLabel[array.size()]; 
    JLabel[] data = new JLabel[array.size()]; 
    JLabel[] setting = new JLabel[array.size()]; 

    System.out.println(array.size()); 


    int i = 0; 
    for(int k=0; k<array.size(); k++){ 
     movement[k] = new JLabel(""); 
     movement[k].setForeground(SystemColor.text); 
     movement[k].setFont(new Font("Segoe UI", Font.PLAIN, 20)); 
     movement[k].setBounds(17, i, 145, 30); 
     movement[k].setText(array.get(array.size() - k - 1).getAmount() + "€"); 
     panel.add(movement[k]); 

     description[k] = new JLabel(""); 
     description[k].setForeground(SystemColor.text); 
     description[k].setFont(new Font("Segoe UI", Font.PLAIN, 20)); 
     description[k].setBounds(187, i, 274, 30); 
     description[k].setText(array.get(array.size() - k - 1).getDescription()); 
     panel.add(description[k]); 

     data[k] = new JLabel(""); 
     data[k].setForeground(SystemColor.text); 
     data[k].setFont(new Font("Segoe UI", Font.PLAIN, 20)); 
     data[k].setBounds(478, i, 145, 30); 
     data[k].setText(array.get(array.size() - k - 1).getDate()); 
     panel.add(data[k]); 

     setting[k] = new JLabel(); 
     setting[k].setIcon(new ImageIcon(List.class.getResource("/it/andreavaiuso/financemanager/images/edit.png"))); 
     setting[k].setForeground(SystemColor.text); 
     setting[k].setFont(new Font("Segoe UI", Font.PLAIN, 20)); 
     setting[k].addMouseListener(new MouseClass(array.size() - k - 1) { 
      @Override 
      public void mouseClicked(MouseEvent arg0) { 
       Modify mdf = new Modify(this.index); 
       mdf.setVisible(true); 
       dispose(); 
      } 
     }); 
     setting[k].setBounds(640, i, 82, 30); 
     panel.add(setting[k]); 

     i += 40; 



    } 

Но я не знаю, как для прокрутки. Я пробовал JScrollPane, но не работает! Я уверен, что есть простой способ, чтобы добавить эти элементы к моей панели ...

+0

Добавить JScrollPane. Добавьте JPanel в JScrollPane вместо JFrame. – Compass

+0

* «Я пробовал JScrollPane, но не работает!» * Добавьте свою попытку на пример кода –

ответ

1

Я попытался cо спаренной JScrollPane но не работаю!

Ну, я вижу много кода с setBounds(...), что подразумевает использование нулевого макета.

Не используйте нулевой макет. Swing был разработан для использования с менеджерами компоновки. Фактически панель прокрутки будет работать только при использовании с менеджером компоновки, потому что панель прокрутки должна знать предпочтительный размер панели, чтобы она могла определять, когда вы используете полосы прокрутки.

Я также предлагаю вам также использовать JTable для чего-то подобного. Это более эффективно, потому что вам не нужно создавать отдельные компоненты для каждой строки данных. Прочтите раздел из учебника Swing по телефону How to Use Tables для получения дополнительной информации и примеров.

+0

Спасибо, я решил научиться использовать новый тип макета! –

0

Для JScrollPane вам нужно 1 JScrollPane, 1 JList и один DefaultListModel.

Сначала добавьте свои пункты в DefaultListModel, затем добавить модель в JList, а затем вы делаете JScrollPane с переходом в качестве аргумента ваш JList

Пример:

DefaultListModel model = new DefaultListModel<String>(); 


JList list = new JList<String>(); 
model.addElemenet("1"); 
model.addElemenet("3"); 
model.addElemenet("2"); 
list.setModel(model); 
JScrollPane scrollPane = new JScrollPane(list);