【发布时间】:2014-04-30 00:43:03
【问题描述】:
我有什么: 右侧带有滚动面板的拆分面板。 在这个滚动面板中,我有一个 JPanel。 我想在这个 JPanel 中有一系列其他 JPanel 堆叠在另一个 JPanel 下。 我将布局设置为 BoxLayout。现在它堆叠了多个 JPanel,但我有两个问题: 如果我来自 JPanel 的内容占用的空间比我的框架少,那么 Jpanel 之间的空间就会很大。
如果我来自 JPanel 的内容比我的框架大,那么 Pannel 将相互重叠,并且我的来自 scrollPanel 的滚动不会激活。
frame = new Frame();
splitPane = new SplitPane();
scrollPane = new ScrollPane();
frame.add(splitPane);
scrollPane.setViewportView(new Lesson());
splitPane.setRightComponent(scrollPane);
splitPane.setLeftComponent(new JTree());
其中 Frame、SplitPane、ScrollPane() 是扩展 JFrame、JSplitPane、JScrollPane 的类。 Atm 他们只有一个构造函数,在它工作之后,我想在那里进行一些自定义。
public class Lesson extends JPanel {
private static final long serialVersionUID = 1L;
public Lesson() {
customize();
String text = "text from pictures";
add(new Paragraph(text));
add(new Paragraph(text));
}
private void customize() {
BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS);
setLayout(boxLayout);
}
}
public class Paragraph extends JPanel {
private static final long serialVersionUID = 1L;
public Paragraph(String text) {
setLayout(new FlowLayout(FlowLayout.LEFT));
setPreferredSize(new Dimension());
StringTokenizer splitStringTokenizer = new StringTokenizer(text, " ");
while(splitStringTokenizer.hasMoreTokens()){
add(label(splitStringTokenizer.nextToken().toString()));
}
}
private JLabel label(String string){
JLabel jlabel= new JLabel(string);
return jlabel;
}
}
关于我如何解决这个问题的任何提示?提前 Ty。
【问题讨论】:
-
您的问题是您的 Pharagraph 类(应该重命名为 Paragraph 吗?) JPanel 使用 FlowLayout,如果 JPanel 的内容大于其大小,它不会增加其大小。您可能希望使用其他布局,甚至创建自己的自定义布局来解决此问题。问题:您的令牌必须是 JLabels 吗?如果您只是将文本添加到 JTextArea,那么您的问题就会得到解决。
-
Tokens buns 是 JLabels,即使是文本,我想稍后在一些 jlabels 中添加一些鼠标侦听器。我删除了 flowLayout,但它仍然在其他面板上
-
"I removed the FlowLayout"-- 你确定吗? JPanel 的默认布局是 FlowLayout,我敢打赌,如果您打印出此类的布局,即使您将其删除,它实际上也会是 FlowLayout。可以在 JTextArea 中使用 MouseListener,您可以识别单击了哪些文本。我再次建议使用 JTextArea。 -
我将开始搜索 JTextArea 以及如何做到这一点。 Ty 获取信息。
标签: java swing layout jpanel layout-manager