2016-11-30 3 views
0

Я пишу небольшой прототип, который должен отображать некоторые JLabels с текстом в нем, а полный сайт должен быть прокручиваемым.Java Swing JScrollPane не прокручивается/scalling

Проблема, которая у меня есть, заключается в том, что прокрутка не прокручивается, и текст только сильно затухает.

Scrolling not working

Это следующий код, я уже пытался работать с PreferredSize и SetSize, но ничего не получалось.

public History(Controller c, Model m) {   
      new HistoryHandler(this.history).save(); 

    this.setLayout(new BorderLayout()); 

    this.history = new ArrayList<>(); 

    this.history = new ArrayList<>(); 
    this.history = new HistoryHandler(this.history).load(); 

    this.label = new JLabel(); 
    Container c1 = new Container(); 
    c1.setLayout(new GridLayout(this.history.size(),1)); 
    Container c2 = new Container(); 
    c2.setLayout(new GridLayout(this.history.size(),1)); 
    Container c3 = new Container(); 
    c3.setLayout(new GridLayout(this.history.size(),1)); 
    Container c4 = new Container(); 
    c4.setLayout(new GridLayout(this.history.size(),1)); 
    Container c5 = new Container(); 
    c5.setLayout(new GridLayout(this.history.size(),1)); 
    Container c6 = new Container(); 
    c6.setLayout(new GridLayout(this.history.size(),1)); 

    JLabel c0 = new JLabel(); 
    c0.setLayout(new GridLayout(1,6)); 
    for (int i = 0; i < this.history.size(); i++) { 
     c1.add(new JLabel(this.history.get(i).getUser())); 
     c2.add(new JLabel(this.history.get(i).getDate())); 
     c3.add(new JLabel(this.history.get(i).getFilesize())); 
     c4.add(new JLabel(this.history.get(i).getFilename())); 
     c5.add(new JLabel(this.history.get(i).getMessage())); 
     c6.add(new JLabel(""+this.history.get(i).isAccepted())); 

    } 
    this.label.setLayout(new BorderLayout()); 
    c0.add(c2); 
    c0.add(c1); 
    c0.add(c4); 
    c0.add(c3); 
    c0.add(c6); 
    c0.add(c5); 
    this.label.add(c0, BorderLayout.CENTER); 

    this.scroll = new JScrollPane(this.label, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    this.add(this.scroll); 

    this.setVisible(true); 
} 
+0

Если 'Container' ссылается на java.awt.Container, замените каждое появление' new Container' 'новым JPanel'. Никто не должен напрямую конкретизировать Контейнер. Вы также должны использовать JPanel вместо JLabel для хранения нескольких компонентов; JLabel не предназначен для детей, хотя это технически разрешено. – VGR

+0

Я заменил все 'new Container'' новым JPanel', но он все еще не работает. – Meister96Fels

+2

Вам может быть проще просто разместить все эти данные в JTable и разместить JTable в JScrollPane. – VGR

ответ

0

Замените контейнер и JLabel на JTable, теперь это окончательное решение.

String[] columnNames = { 
      this.translation.getTranslation("date"), 
      this.translation.getTranslation("user"), 
      this.translation.getTranslation("filename"), 
      this.translation.getTranslation("filesize"), 
      this.translation.getTranslation("isAccepted"), 
      this.translation.getTranslation("message") 
    }; 

    Object[][] data = new Object[this.history.size()][6]; 

    for (int i = 0; i < this.history.size(); i++) { 
     for (int j = 0; j < 6; j++) { 
      if (j == 0) data[i][j] = this.history.get(i).getDate(); 
      if (j == 1) data[i][j] = this.history.get(i).getUser(); 
      if (j == 2) data[i][j] = this.history.get(i).getFilename(); 
      if (j == 3) data[i][j] = this.history.get(i).getFilesize(); 
      if (j == 4) data[i][j] = this.history.get(i).isAccepted(); 
      if (j == 5) data[i][j] = this.history.get(i).getMessage(); 
     } 
    } 

    JTable table = new JTable(data, columnNames); 

    this.scroll = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    this.add(this.scroll); 

Благодаря VGR за то, что он дал мне tipp, чтобы заменить его на JTable.

Смежные вопросы