Java - 组件之后的随机空间

时间:2011-11-25 09:30:17

标签: java swing jpanel

我目前正在制作Twitter客户端,我发现了一些我无法解决的问题。 我不确定我应该包含哪些代码,所以我会发布一张图片。 Picture

我在JScrollPane中有一个JPanel,然后我将小JPanels(推文)添加到该JPanel。但是在这些组件之后总会有一个空间。 关于空间来自哪里的任何建议? 先感谢您。 以下是一些代码:

这是处理Tweet JPanels的主要JPanel:

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

在Main JFrame中,我以这种方式创建选项卡式窗格和ScrollPanes:

 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);

0 个答案:

没有答案