欢迎,java-swing程序员。
我想告诉你我最近的问题,因为我一次又一次地追逐着我的尾巴。我用JPanel容器创建了简单的JFrame(我也尝试了JList)。在这里,我使用BoxLayout和一堆JButton,它们是垂直对齐的,就像我想要的一样。
这就出现了问题:框架需要滚动,但只需要垂直框架。我希望看到没有水平滚动的按钮的完全可压缩名称,只是垂直滚动。它们中的文本仍然应该换行,并且当帧较薄时,垂直滚动应该使其自身更长。简单地向JScrollPane添加容器会使按钮失去其标题包装能力,并出现不希望的水平滚动。值得一提的是,按钮的文本将是动态的,并且会根据各种动作进行更改,因此BoxLayout在我看来只是这里的最佳选择。
我想要实现的是类似于效果JTextArea,但是我的JScrollPane不是文本,而是向下/向上滚动按钮。
我没有找到任何简单的解决方案,所有的希望都消失了!我依靠你的技能
先感谢您。在这里你会看到一些代码,因为我的描述可能不够清晰:
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
public Main() {
setLayout(new GridLayout(0, 1, 10, 10));
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
final JButton tester0 = new JButton("<html>primodial one, the mighty tester of wrapping");
panel.add(tester0);
panel.add(new JButton("one"));
panel.add(new JButton("<html> second one, great knight of the Order of the Didgeridoo"));
panel.add(new JButton("three"));
panel.add(new JButton("four"));
panel.add(new JButton("five"));
panel.add(new JButton("six"));
panel.add(new JButton("seven"));
panel.add(new JButton("eight"));
panel.add(new JButton("nine"));
panel.add(new JButton("ten"));
panel.add(new JButton("eleven"));
panel.add(new JButton("twelve"));
add(panel);
// JScrollPane scroll2 = new JScrollPane(panel);
// add(scroll2);
// final JScrollBar scrollBar1 = scroll2.getVerticalScrollBar();
//// scrollBar1.
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Main frame = new Main();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
//frame.pack();
frame.setSize(270, 200);
frame.setVisible(true);
}
});
}
}
祝你好运!
答案 0 :(得分:2)
听起来你可能想要Wrap Layout,它会根据需要将行换行到下一行。
答案 1 :(得分:1)
为了记录@MadProgrammer给出的好建议,我在此发布结果,所以任何人都可以快速将其与自己的期望进行比较。
在我创建的类比独立类的帮助下(并称之为'Wrap'),我只修改了最后一个构造函数行中的一个:
JScrollPane scroll2 = new JScrollPane(new Wrap(panel));
add(scroll2);
并完成将html标签添加到每个按钮的名称。
像梦一样工作。