我目前正在制作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);