[英]Trying to wrap JLabels to JPanel inside JScrollPane
编辑:如示例(现在由我编写)中,我想要实现的是将JLabel(+ JTextFields,不在示例中)包装到带有FlowLayout的JPanel中,并使用BoxLayout将这些面板与另一面板进行排序,但使用JScrollPane对其进行限制,因此我可以指定视图区域的高度,并且如果这些JPanel(打包的JLabel)超过了高度,则用户必须滚动,但只能垂直滚动。
public class Example2 extends JFrame {
JScrollPane scrollPane = new JScrollPane();
JPanel viewPanel = new JPanel();
public Example2() {
setSize(400,300);
buildGUI();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void buildGUI() {
// SCROLLPANE PLACEMENT
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(scrollPane, GroupLayout.PREFERRED_SIZE, 350, GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.addContainerGap()
.add(scrollPane, GroupLayout.PREFERRED_SIZE, 223, GroupLayout.PREFERRED_SIZE)
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
// REST
scrollPane.setViewportView(viewPanel);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
viewPanel.setLayout(new BoxLayout(viewPanel, BoxLayout.Y_AXIS));
for(int i=0; i<3; i++) {
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout(FlowLayout.LEADING));
panel.setBackground(new Color(200,i*100,100*i));
for(int j=0;j<20;j++) {
JLabel label = new JLabel("label "+j);
panel.add(label);
}
viewPanel.add(panel);
}
}
public static void main(String[] args) {
new Example2();
}
}
不确定,但“ 换行布局”可能适合您。
除了使用包装布局管理器之外 ,一种可能在非常有限的上下文中起作用的简单选择是使用具有包装方向的 JList
:
JList list = new JList(new String[]{"lllllllllllllll", "abc", "ajdfkalfjlsjfjsakljflkajsd"});
list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
list.setVisibleRowCount(-1); // see setLayoutOrientation javadoc for why
JScrollPane listScroller = new JScrollPane(list);
listScroller.setPreferredSize(new Dimension(250, 20));
getContentPane().add(listScroller);
JList
默认单元格渲染器是JLabel
,您可以设置列表的样式,使其看起来不像列表(无边框,无背景)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.