【问题标题】:Adding a JScrollPane to JDialog将 JScrollPane 添加到 JDialog
【发布时间】:2017-12-11 14:27:32
【问题描述】:

我有一个工作的JDialog,现在我想给它添加滚动条。文档让我有点困惑。我是否将对话框添加到JScrollPane,反之亦然?

似乎所有示例在对话框中都有一个JPanel,并且面板是可滚动的。我有一个动态增长的对话框,所以我希望对话框本身可以滚动。有人能指出我正确的方向吗?

回复安德鲁·汤普森

感谢您的回复。

此时我让布局管理器确定大小。我还不确定让它变得多大,所以我还没有设置任何尺寸。它只是随着我添加行而增长。这将是这个开发阶段的一部分。宽度不会改变,只是高度。我使用“invokelater”显示对话框。这是相关代码:

timeLineDialog = new JDialog();
timeLineDialog.setLayout(layout);
timeLineDialog.setModalityType(ModalityType.MODELESS);
timeLineDialog.setTitle("Time Line Settings");
timeLineDialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
.
.
.
timeLineDialog.pack();
timeLineDialog.setLocationRelativeTo(GUI.getInstance().getFrame());
timeLineDialog.setVisible(true);

我想要对话框窗格右侧的滚动条。

【问题讨论】:

  • “我是否将 JDialog 添加到 JScrollPane 中,反之亦然?” 两者都没有。而是将对话框的主面板(需要滚动的东西)添加到滚动窗格中,然后将滚动窗格添加到对话框中。 “我有一个动态增长的对话框,所以我希望对话框本身是可滚动的。” 我对你的意思感到困惑。以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,具有更大的宽度和高度 - 以显示应如何使用额外空间/应出现滚动条的位置。跨度>
  • 我强烈建议您花时间看看JTable
  • 谢谢。你是对的。不幸的是,这个东西是进化而不是设计出来的。我可能会决定在某个时候彻底重写,但我需要得到我现在正在工作的东西。
  • 在尝试了 JTable 之后,我发现它不适合我的应用程序。有太多的事情我不能用它来做。例如,我不能跨越列(没有大量代码),即使我实现了,如果需要 2 行,我也不能有一个非滚动标题。

标签: java swing jscrollpane jdialog


【解决方案1】:

我认为您必须创建一个 JDialog,然后在其中添加一个 JScrollPane 和您的内容。以下代码对我有用:

import javax.swing.JDialog;
import javax.swing.JScrollPane;
import java.awt.BorderLayout;
import javax.swing.JLabel;

public class Dialog extends JDialog {
    private final JScrollPane scrollPane = new JScrollPane();
    //I added the breaks to the label below to be able to scroll down.
    private final JLabel lblContent = new JLabel("<html><body><p>Content<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>Content<br><br><br><br><br><br>Content</p></body></html>");

    public static void main(String[] args) {
                    Dialog dialog = new Dialog();
                    dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                    dialog.setVisible(true);
    }

    public Dialog() { 
        setBounds(100, 100, 450, 300);
        getContentPane().setLayout(new BorderLayout(0, 0));

        getContentPane().add(scrollPane, BorderLayout.CENTER);

        scrollPane.setViewportView(lblContent);

    }
}

希望这会有所帮助。

【讨论】:

  • 啊,这对我来说很有意义。现在应该把JDialog改成JScrollPane,然后把那个加到JDialog中。谢谢。
  • 嗯,想多了,我还需要JDialog吗? ScrollPane 本身不能工作吗?
  • 我想我已经弄清楚了。您的示例有效,因为您添加了 1 个组件。我发现您只能将一个组件添加到 JScollPane 中,因此需要将 JDialog 作为其单个组件添加到滚动窗格中。我需要做一些工作,所以我还没有尝试过。
  • 添加一个JPanel 并添加内容怎么样?如果面板比 ScrollPane 大,我认为滚动会起作用。
  • 嗯,我有一个 JDIalog 已经在工作了。将其转换为 JPanel 很重要吗?
猜你喜欢
  • 2017-03-03
  • 1970-01-01
  • 2012-11-07
  • 2012-11-17
  • 2013-12-17
  • 2014-01-08
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多