我有一个JScrollPane,其中包含一个JPanel,该JPanel包含一组JPanels。
集合大小可以更改,这就是为什么我把它放在JScrollPane中的原因。
由于某种原因,无论我做什么,旋钮都不会出现在卷轴上。
正如您所看到的,主JPanel(预览)确实有一个布局。我读到如果布局为空,可能会发生这种情况。
有人知道怎么解决这个吗?
这是我的代码:
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SpringLayout;
import javax.swing.SwingConstants;
public class ResultsPanel extends JPanel
{
private static final long serialVersionUID = -1713825505191028954L;
private JTextPane name, url, tags;
private JButton clear;
private JLabel results;
private JScrollPane scroller;
private JPanel previews;
public ResultsPanel()
{
super();
initElements();
addElements();
setLayout(getSpringLayout());
}
private void initElements()
{
this.previews = new JPanel();
this.previews.setLayout(new SpringLayout());
this.previews.setBackground(Color.white);
this.scroller = new JScrollPane(this.previews, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.scroller.getVerticalScrollBar().setUnitIncrement(1);
this.results = new JLabel("[Displaying nothing]");
this.results.setHorizontalAlignment(SwingConstants.CENTER);
this.name = new JTextPane();
this.name.setEditable(false);
this.url = new JTextPane();
this.url.setEditable(false);
this.tags = new JTextPane();
this.tags.setEditable(false);
this.clear = new JButton("Clear");
this.clear.setEnabled(false);
}
private void addElements()
{
add(clear);
add(this.results);
add(this.scroller);
}
private SpringLayout getSpringLayout()
{
SpringLayout layout = new SpringLayout();
layout.putConstraint(SpringLayout.SOUTH, this.clear, -5, SpringLayout.SOUTH, this);
layout.putConstraint(SpringLayout.EAST, this.clear, -5, SpringLayout.EAST, this);
layout.putConstraint(SpringLayout.WEST, this.clear, 5, SpringLayout.WEST, this);
layout.putConstraint(SpringLayout.NORTH, this.results, 5, SpringLayout.NORTH, this);
layout.putConstraint(SpringLayout.EAST, this.results, -5, SpringLayout.EAST, this);
layout.putConstraint(SpringLayout.WEST, this.results, 5, SpringLayout.WEST, this);
layout.putConstraint(SpringLayout.NORTH, this.scroller, 2, SpringLayout.SOUTH, this.results);
layout.putConstraint(SpringLayout.EAST, this.scroller, -5, SpringLayout.EAST, this);
layout.putConstraint(SpringLayout.WEST, this.scroller, 5, SpringLayout.WEST, this);
layout.putConstraint(SpringLayout.SOUTH, this.scroller, -2, SpringLayout.NORTH, this.clear);
return layout;
}
public void show(ArrayList<Reaction> reactions)
{
this.results.setText(reactions.size() + " results");
this.previews.removeAll();
this.previews.repaint();
if (reactions == null || reactions.size() == 0)
return;
ArrayList<ReactionPreviewPanel> panels = new ArrayList<ReactionPreviewPanel>();
for (Reaction r : reactions)
{
ReactionPreviewPanel temp = new ReactionPreviewPanel(r);
panels.add(temp);
}
for (ReactionPreviewPanel rpp : panels)
this.previews.add(rpp);
SpringLayout layout = new SpringLayout();
for (int i = 0; i < panels.size(); i++)
{
layout.putConstraint(SpringLayout.WEST, panels.get(i), 2, SpringLayout.WEST, this.previews);
layout.putConstraint(SpringLayout.EAST, panels.get(i), -3, SpringLayout.EAST, this.previews);
if (i == 0)
layout.putConstraint(SpringLayout.NORTH, panels.get(i), 2, SpringLayout.NORTH, this.previews);
else
layout.putConstraint(SpringLayout.NORTH, panels.get(i), 2, SpringLayout.SOUTH, panels.get(i - 1));
}
this.previews.setLayout(layout);
}
}
如果没有更多的细节,我想ResultsPanel的容器正在扩展,以包含整个ResultsPanel,因此滚动条永远不是必需的。强制限制结果面板和/或结果面板容器的最大大小。
问题内容: 在Java应用程序中使用时,我遇到了一个小问题。 我有一个。这被动态地与按钮(垂直排序),其可以是任何宽度的更新。的自动调整其宽度最大的部件内部。 现在,当出现垂直滚动条时,它会占用my右侧的一些空间,这将导致最大的按钮无法完全显示。除了显示整个按钮之外,我不想使用水平滚动条。 当滚动条出现时,是否有办法调整我的大小,使其很好地显示在我的按钮旁边?还是有其他方法可以使滚动条出现在我的旁
我有一个JFrame(黑色)包含一个主JPanel(灰色),这个JPanel包含另外三个JPanels:North和South(红色)以及Center(蓝色)。中央的蓝色JPanel将在程序过程中动态添加大量的JPanel(绿色)。当中心JPanel已满时,我希望一个JScrollbar自动出现,向下滚动中心面板,并看到它包含的所有子(绿色)面板。谁能帮帮我吗?问题是滚动条根本没有出现,如果我在蓝
我有一个叫做CatalogPane的JPanel,它的大小是800 x 600,它位于一个叫做BookFrame的JFrame中的JTabbedPane中。因此,在CatalogPane中,我创建了一个名为bookDisplay的JPanel,它显示书籍及其详细信息的列表。我希望它的大小为780 x 900,滚动条的大小为20px,并且比框架高,这样就可以滚动。然后我创建了一个尺寸为800 x 4
所以,我正在制作一种文本编辑器,我需要一个用于垂直导航的JScrollPane。但我不能让它工作。 我已经阅读了谷歌搜索结果前十页上的每一篇奇怪的教程,但我无法让它发挥作用。 假设我有JFrame(尺寸1000x800)。我想在其中放置一个JPanel(1000x2000),以便它与JFrame水平对齐。我想在JPanel的右侧粘贴一个简单的滚动条,这样就可以访问它的其余部分。 我减少了大小,我将
我有一个类可以画一些非常简单的图形,比如直线、圆和矩形。线条可以动态扩展,有时当它们扩展到超出分辨率时,如果没有滚动条,就无法看到。因此,我已经将JScrollPane添加到JFrame中,但不幸的是,尽管已经调用了布局管理器,但滚动条还是无法滚动。 这是我所拥有的:-一个绘制组件(线条、矩形、圆形)的类-一个设置JFrame/JScrollPane的类 这是我的GUI类的摘录代码: 通过上面的代
我在JScrollPane中有一个JPanel,JScrollPane嵌套在其他容器中。我的JPanel在这个问题中使用了SO user jxd中修改过的FlowLayout。 这可能是信息过火,但所讨论的面板的完整嵌套如下所示: JPanel(ModifiedFlowLayout)>JScrollPane>JPanel(GridBagLayout)>JTabbedPane>JPanel(Grid