Java 向JDialog添加JScrollPane

Java 向JDialog添加JScrollPane,java,swing,jscrollpane,jdialog,Java,Swing,Jscrollpane,Jdialog,我有一个工作的JDialog,现在我想添加滚动条。文档对我来说有点混乱。我是将对话框添加到JScrollPane还是将对话框添加到JScrollPane中 似乎所有示例的对话框中都有一个JPanel,面板是可滚动的。我有一个动态增长的对话框,所以我希望对话框本身是可滚动的。有人能给我指出正确的方向吗 回复安德鲁·汤普森 谢谢你的回复 此时,我让布局管理器决定大小。我还不确定它到底有多大,所以我还没有设定任何尺寸。它只是随着我添加行而增长。这将是这个发展阶段的一部分。宽度不会改变,只是高度会改变。

我有一个工作的
JDialog
,现在我想添加滚动条。文档对我来说有点混乱。我是将对话框添加到
JScrollPane
还是将对话框添加到
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以及其中的内容。以下代码适用于我:

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);

    }
}
import javax.swing.JDialog;
导入javax.swing.JScrollPane;
导入java.awt.BorderLayout;
导入javax.swing.JLabel;
公共类对话框扩展JDialog{
私有最终JScrollPane scrollPane=新JScrollPane();
//我在下面的标签中添加了分隔符,以便能够向下滚动。
私人最终JLabel lblContent=新JLabel(内容

















内容








<; 公共静态void main(字符串[]args){ Dialog=新建Dialog(); setDefaultCloseOperation(JDialog.DISPOSE\u ON\u CLOSE); 对话框.setVisible(true); } 公共对话框(){ 立根(100100450300); getContentPane().setLayout(新的BorderLayout(0,0)); getContentPane().add(滚动窗格,BorderLayout.CENTER); scrollPane.setViewportView(lblContent); } }


希望这能有所帮助。

我认为您必须创建一个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);

    }
}
import javax.swing.JDialog;
导入javax.swing.JScrollPane;
导入java.awt.BorderLayout;
导入javax.swing.JLabel;
公共类对话框扩展JDialog{
私有最终JScrollPane scrollPane=新JScrollPane();
//我在下面的标签中添加了分隔符,以便能够向下滚动。
私人最终JLabel lblContent=新JLabel(内容

















内容








<; 公共静态void main(字符串[]args){ Dialog=新建Dialog(); setDefaultCloseOperation(JDialog.DISPOSE\u ON\u CLOSE); 对话框.setVisible(true); } 公共对话框(){ 立根(100100450300); getContentPane().setLayout(新的BorderLayout(0,0)); getContentPane().add(滚动窗格,BorderLayout.CENTER); scrollPane.setViewportView(lblContent); } }


希望这能有所帮助。

“我是将JDialog添加到JScrollPane中,还是将JDialog添加到JScrollPane中?”。而是将对话框的主面板(需要滚动的内容)添加到滚动窗格中,然后将滚动窗格添加到对话框中。“我有一个动态增长的对话框,所以我希望对话框本身可以滚动。”我不明白你的意思。以最小尺寸、更宽和更高的宽度提供ASCII艺术或GUI预期布局的简单绘图,以显示如何使用额外空间/滚动条应出现的位置。我强烈建议您花时间查看
JTable
谢谢。你说得对。不幸的是,这个东西是进化而不是设计的。我可能会决定在某个时候做一个完整的重写,但我需要得到我现在正在工作的东西。在试用JTable之后,我发现它不适合我的应用程序。有太多的事情我不能用它来做。例如,我不能跨列(没有扩展代码),即使我实现了这一点,如果有两行,我也会有一个非滚动的标题。“我是将JDialog添加到JScrollPane中,还是将JDialog添加到JScrollPane中?”。而是将对话框的主面板(需要滚动的内容)添加到滚动窗格中,然后将滚动窗格添加到对话框中。“我有一个动态增长的对话框,所以我希望对话框本身可以滚动。”我不明白你的意思。以最小尺寸、更宽和更高的宽度提供ASCII艺术或GUI预期布局的简单绘图,以显示如何使用额外空间/滚动条应出现的位置。我强烈建议您花时间查看
JTable
谢谢。你说得对。不幸的是,这个东西是进化而不是设计的。我可能会决定在某个时候做一个完整的重写,但我需要得到我现在正在工作的东西。在试用JTable之后,我发现它不适合我的应用程序。有太多的事情我不能用它来做。例如,我不能跨列(没有扩展代码),即使我实现了这一点,如果需要两行,我也有一个非滚动的标题。啊,这对我来说是有意义的。现在的JDialog应该更改为JScrollPane,然后添加到JDialog中。谢谢。嗯,再想一想,我需要JDialog吗?滚动窗格本身不起作用吗?我想我已经弄明白了。您的示例之所以有效,是因为添加了1个组件。我发现您只能向JScollPane添加一个组件,因此需要将JDialog作为其单个组件添加到滚动窗格中。我需要在这方面做一些工作,所以我还没有尝试过。添加一个JPanel并向其中添加内容怎么样?我认为如果面板比滚动窗格大,滚动就可以了。我有一个JDIalog已经在工作了。将其转换为JPanel是一个大问题吗