JTextArea文本不可见且无滚动

时间:2015-05-14 11:57:58

标签: java eclipse swing

第一次用Java编写GUI

http://i58.tinypic.com/s13gh0.png

到目前为止,当我单击“坐标异常”时,JTextArea中会显示字符串的字符串,但查看文本的唯一方法是突出显示它。

我也尝试过向JTextArea添加滚动条,但没有运气。

JTextArea textArea = new JTextArea();
textArea.setBounds(10, 79, 172, 339);
frame.getContentPane().add(textArea);

JButton btnNewButton_1 = new JButton("Coordinate Anomalies");

btnNewButton_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        ArrayList<String> anomalies = vessels.coordinateAnomaly();
        JScrollPane jp = new JScrollPane();
        jp.setViewportView(textArea);

        for (String a : anomalies) {
            textArea.append(a + "\n");
        }

        textArea.setBounds(10, 79, 172, 339);
        frame.getContentPane().add(textArea);
    }
});

btnNewButton_1.setBounds(10, 45, 172, 23);
frame.getContentPane().add(btnNewButton_1);

这是我的代码(抱歉jank),不能强调我是GUI的新手并且非常感谢任何建议。

4 个答案:

答案 0 :(得分:5)

组件只能有一个父组件。在应用程序启动时添加滚动窗格而不是JTextArea

frame.add(new JScrollPane(textArea));

答案 1 :(得分:1)

简单解决方案:

JTextArea添加到JFrame时,只需在其中添加滚动窗格

即可
JTextArea textarea = new JTextArea();
add(new JScrollPane(textarea));

答案 2 :(得分:0)

在GUI已经显示时添加组件时,需要调用re / in / validate来完成所有布局,并重新绘制()以使其显示

btnNewButton_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        ArrayList<String> anomalies = vessels.coordinateAnomaly();
        JScrollPane jp = new JScrollPane();
        jp.setViewportView(textArea);

        for (String a : anomalies) {
            textArea.append(a + "\n");
        }

        textArea.setBounds(10, 79, 172, 339);
        frame.getContentPane().add(jp); // changed
        frame.getContentPane().invalidate(); // added
        frame.getContentPane().validate(); // added
        frame.getContentPane().repaint(); // added
    }
});

答案 3 :(得分:0)

感谢@Reimeus的帮助,这是我最终实施的解决方案,并且有效。

JTextArea textArea = new JTextArea();
JScrollPane jp = new JScrollPane(textArea);
jp.setBounds(10, 79, 172, 339);
frame.getContentPane().add(jp);

JButton btnNewButton_1 = new JButton("Coordinate Anomalies");
btnNewButton_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        textArea.setText("");
        ArrayList<String> anomalies = vessels.coordinateAnomaly(); 

        for(String a : anomalies){
               textArea.append(a + "\n");
            }
    }
});
btnNewButton_1.setBounds(10, 45, 172, 23);
frame.getContentPane().add(btnNewButton_1);