在JDialog上使用Scrollbar Swing TextArea

时间:2014-02-05 05:53:17

标签: java swing jscrollpane jtextarea jdialog

我有一个场景,当用户点击按钮时,将打开一个带有文本区域的弹出窗口。文本区域在需要时会有一些带滚动条的内容。为了实现这一点,我使用了JDialog并在JDialog中添加了一个文本区域。在我的情况下,我能够显示按钮单击对话框和带内容的对话框上的文本区域。但我无法获得文本区域的滚动条。我也将JScrollPane用于文本区域。

public class DialogPanel {

    public void createDialog() {
        final JFrame mainFrame = new JFrame();
        mainFrame.setVisible(true);
        mainFrame.setSize(500, 600);
        mainFrame.setLayout(new BorderLayout());
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton btn = new JButton("Open Dialog");
        mainFrame.add(btn, BorderLayout.SOUTH);
        JTextField txtField = new JTextField();
        mainFrame.add(txtField, BorderLayout.NORTH);
        btn.setPreferredSize(new Dimension(100, 100));
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                JDialog dialog = new JDialog(mainFrame);
                dialog.setLocationByPlatform(true);
                JTextArea txtArea = new JTextArea();
                txtArea.setAutoscrolls(true);
                txtArea.setPreferredSize(new Dimension(900, 500));
                txtArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));
                txtArea.setFont(new Font("courier new", Font.PLAIN, 12));
                txtArea.setLineWrap(true);
                JScrollPane txtAreaScroll = new JScrollPane();
                txtAreaScroll.setViewportView(txtArea);
                txtAreaScroll.setAutoscrolls(true);

                File file;
                String line = null;
                StringBuilder fileContents = new StringBuilder();
                try {
                    file = new File(
                            "D:\\Softwares\\Apache\\apache-tomcat-7.0.47\\RUNNING.txt");
                    BufferedReader reader = new BufferedReader(new FileReader(
                            file));
                    while ((line = reader.readLine()) != null) {
                        fileContents.append(line + "\n");
                    }
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

                txtArea.setText(fileContents.toString());

                dialog.add(txtAreaScroll);
                dialog.pack();
                dialog.setVisible(true);
            }
        });
    }

    public static void main(String[] args) {
        DialogPanel dialogPanel = new DialogPanel();
        dialogPanel.createDialog();
    }
}

enter image description here

3 个答案:

答案 0 :(得分:4)

基本上,txtArea.setPreferredSize(new Dimension(900, 500));正在删除JTextArea使用的自动计算,它用于确定显示所有文本所需的空间量。你有效地说,只需要500像素的高度。

您可以“设置”滚动窗格的首选大小,但这并不是真正推荐的。相反,您希望更改getPreferredScrollableViewportSize

JTextArea返回的值

这告诉滚动窗格可视区域的大小......如果可以......

JTextArea txtArea = new JTextArea() {

    @Override
    public Dimension getPreferredScrollableViewportSize() {
        return new Dimension(900, 500);
    }

};

请查看Scrollable了解详情

<强>更新

正如AndrewThompson指出的那样,更好(和首选的方式)是简单地指定JTextArea的行和列,并让它根据平台渲染功能找出这意味着什么... < / p>

JTextArea txtArea = new JTextArea(40, 100);

是的,为了简单......

答案 1 :(得分:0)

您正在使用dialog.pack()查看here并为对话框定义自己的尺​​寸

答案 2 :(得分:0)

这样你可以使用带滚动的文本区域:

log4j.appender.R.File=${catalina.home}/logs/myapplication.log