Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的jscorllpane不';行不通_Java_Jscrollpane - Fatal编程技术网

Java 我的jscorllpane不';行不通

Java 我的jscorllpane不';行不通,java,jscrollpane,Java,Jscrollpane,我正在VBOX4.3.4Lubuntu上运行Java1.7.025 问题是jscroll没有自我更新!我该怎么办? 我已经在谷歌上搜索了几个小时了,但我没有找到任何和我要找的内容相近的东西 顺便说一句,对于普通代码很抱歉,没有它很难解释问题。不要使用JScrollPane#add,这不是滚动窗格的工作方式,请尝试使用 看看 不要将文本字段添加到其他容器中。组件只能有一个父组件,因此将其添加到第二个容器将从第一个容器中删除它 旁注。我会避免使用KeyListener,因为文本组件具有使用关键事件的

我正在VBOX4.3.4Lubuntu上运行Java1.7.025

问题是jscroll没有自我更新!我该怎么办? 我已经在谷歌上搜索了几个小时了,但我没有找到任何和我要找的内容相近的东西


顺便说一句,对于普通代码很抱歉,没有它很难解释问题。

不要使用
JScrollPane#add
,这不是滚动窗格的工作方式,请尝试使用

看看

不要将文本字段添加到其他容器中。组件只能有一个父组件,因此将其添加到第二个容器将从第一个容器中删除它

旁注。我会避免使用
KeyListener
,因为文本组件具有使用关键事件的能力,这意味着您的侦听器实际上可能不会收到通知。此外,如果调用它,组件将处于突变操作的中间(它将尝试更新它的模型),这可能导致意想不到的问题和可能的脏更新。 在这种情况下,我可能会尝试使用
DocumentListener
,但您需要对其进行测试

我还将避免使用
null
布局。首先,您将无法在滚动窗格的上下文中影响文本字段的位置,因为滚动窗格使用它自己的布局管理器

此外,操作系统、视频驱动程序和字体之间的差异使得潜在的渲染输出无穷无尽。布局管理员在处理这些情况时会进行猜测工作

public class Gui extends JFrame{
    JTextField tf_input;
    JTextArea ta_output;
    JScrollPane sp_taop;

    private class klis implements KeyListener{    
        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub
            if (e.getKeyCode()==KeyEvent.VK_ENTER){
                //System.out.println("enter");  //debug
                if (!tf_input.getText().isEmpty()){
                    String input = tf_input.getText();

                    ta_output.setText(ta_output.getText()+input+'\n');

                    System.out.println(input);  //debug
                    System.out.println("ok!");  //debug
                    sp_taop.validate(); 
                    tf_input.setText(null);
                }
            }
        }
    }   

    Gui(){
        System.out.println("hello");
        inti();
        render();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void inti() {
        setSize(800, 600);
        //text field input
        tf_input = new JTextField();
        tf_input.setSize(550, 24);
        tf_input.addKeyListener(new klis());
        //text Area
        ta_output = new JTextArea("hello World\n",30,60);
        ta_output.setSize(ta_output.getPreferredSize());
        ta_output.setLineWrap(true);
        ta_output.setEditable(false);
        sp_taop = new JScrollPane();
        sp_taop.add(ta_output);
        sp_taop.setSize(ta_output.getSize().width+20,ta_output.getSize().height);
        sp_taop.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    }   
    private void render() {
        Panel p = new Panel(null);

        ta_output.setLocation(0, 0);
        sp_taop.setLocation(10, 10);
        tf_input.setLocation(10, (sp_taop.getSize().height+20));
        ta_output.repaint();

        //adding
        p.add(sp_taop);
        p.add(tf_input);
        add(p);
    }
}