【发布时间】:2012-11-20 16:29:37
【问题描述】:
我正在尝试创建一个JScrollPane,其中包含一个高度会增加和减少的JPanel。当它变得大于JScrollPane 的大小时,它应该创建一个垂直滚动条,允许我滚动整个JPanel。但是,我很难做到这一点。是的,我知道我没有使用LayoutManagers。不,我不会使用它们,我需要一个不涉及它们使用的解决方案。
这是两个按钮的AbstractActions,它们对JPanel进行加减运算:
class AddACT extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
info.setSize(420,info.getHeight() + 40);
info.add(new SubPanel); // Adds another JPanel into the main JPanel (for content input)
gui.repaint();
infoS.validate();
}
}
class RemoveACT extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
info.remove(subPanel()); // This would remove the last JPanel added to the main JPanel
info.setSize(420,info.getHeight() - 40);
gui.repaint();
infoS.validate();
}
这是主 JPanel 和 JScrollPane 的代码:
final JPanel info = new JPanel();
final JScrollPane infoS = new JScrollPane(info, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
info.setLayout(null);
info.setSize(420,600);
infoS.setLocation(10,80);
infoS.setSize(420,490);
gui.add(infoS); // gui is the frame's content pane (the overall JPanel)
这是我尝试通过实践学习 GUI 的第二个项目。我是 Swing 的完全新手,并且只是 Java 的中级。抱歉,如果我犯了一个非常明显的错误。
【问题讨论】:
-
-1 是的,我知道我没有使用布局管理器。不,我不会使用它们耸耸肩,你坚持要浪费时间;-)
-
使用布局管理器是完全绝对必要的吗?我希望这不是必需的,并且就像 Java 中的大多数事情一样,还有其他方法可以做到这一点。
-
@Thrfoot : A quote from Java Docs "虽然可以不用布局管理器,但如果可能的话,你应该使用布局管理器。布局管理器让你更容易适应与外观和感觉相关的组件外观、不同的字体大小、容器不断变化的大小以及不同的语言环境。布局管理器也可以很容易地被其他容器以及其他程序重用。” .
-
好吧,看来我别无选择。如果我要使用布局管理器(可能是 BoxLayout,用于制作垂直列表),我需要更改哪些内容(除了
setSize到setPreferredSize这样的明显更改)?我真的不确定 JScrollPane 如何与布局管理器交互,并且之前从未真正使用过布局管理器。
标签: java swing user-interface jpanel jscrollpane