Java - случайное пространство после компонентов - PullRequest
1 голос
/ 25 ноября 2011

В настоящее время я делаю клиент для Твиттера и обнаружил проблему, которую не мог решить сам.Я не уверен, какую часть кода я должен включить, поэтому я опубликую изображение. Изображение

У меня есть JPanel в JScrollPane, а затем я добавляю маленькие JPanel (твиты) к этой JPanel.Но после этих компонентов всегда есть место.Любой совет о том, откуда это место пришло?Заранее спасибо.Вот несколько фрагментов кода:

Это основная JPanel, которая обрабатывает Tweet JPanels:

package net.rothens.twitt3ns.gui;

import java.awt.*;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.*;
import net.rothens.twitt3ns.Twitt3ns;
import twitter4j.Status;

/**
 *
 * @author Rothens
 */
public class TweetsPanel extends JPanel {

public java.util.List<Long> timestamps;

public TweetsPanel() {
    initUI();
}

public final void initUI() {
    timestamps = new ArrayList<Long>();
    setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
}

public void addTwitt(Status s) {
    if (!Twitt3ns.tw.mw.isScrollbarOnTop()) {
        Twitt3ns.tw.mw.saveScrollbarPosition();
    }
    int pos = getPos(s.getCreatedAt().getTime()) + 1;
    TweetPanel tp = new TweetPanel(s);
    if (pos >= getComponentCount()) {
        add(tp);
    } else {
        add(tp, pos);
    }

    validate();
    if (!Twitt3ns.tw.mw.isScrollbarOnTop()) {
        Twitt3ns.tw.mw.loadScrollbarPosition(tp.getHeight());
    }
}

/**
 * Update the time on the panels
 */
public void updatePanels() {
    for (Component c : getComponents()) {
        if (c instanceof TweetPanel) {
            ((TweetPanel) c).updateTime();
        }
    }
    validate();

}


/**
 * Gets the position of a new tweet
 * @param what the time when the new component was created
 * @return position of the new component
 */
public int getPos(long what) {
    timestamps.add(what);
    Collections.sort(timestamps);
    return timestamps.size() - timestamps.indexOf(what) - 2;

}

public TweetsPanel(int id) {
    SwingUtilities.invokeLater(new Runnable() {

        public void run() {
            TweetsPanel tl = new TweetsPanel();
            tl.setVisible(true);
        }
    });
}
}

Код Tweet JPanels такой (я выложу в pastebin, этослишком большой): Pastebin

А в главном JFrame я создаю панель с вкладками и панели прокрутки следующим образом:

 tabPane.setTabPlacement(javax.swing.JTabbedPane.BOTTOM);
 tabPane.setAlignmentX(0.0F);
 tabPane.setAlignmentY(0.0F);

 spHome.setAlignmentX(0.0F);
 spHome.setAlignmentY(0.0F);
 spHome.setHorizontalScrollBar(null);
 tabPane.addTab("Otthon", spHome);
 tabPane.addTab("@", null, spMention, "Tweetek amik Téged említenek");

И вот какдобавить JPanels к JScrollPanes:

tpHome.setBorder(null);
tpHome.setFocusable(false);
spHome.setViewportView(tpHome);

tpMention.setBorder(null);
tpMention.setFocusable(false);
spMention.setViewportView(tpMention);
...