我本想写一个小程序,上面是一个文本框,在里面输入文本,下面能够及时地显示出来。代码如下:
///////////////////////////////////
import java.util.*;
import java.io.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;public class MyTextTest { 
    public static void main(String[] args) { 
MyTextFrame frame = new MyTextFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); }
}class MyTextFrame extends JFrame{
public MyTextFrame(){
setTitle("My Text Test");
setSize(400,300);
MyTextPanel panel = new MyTextPanel();
add(panel);
}
}class MyTextPanel extends JPanel{
public MyTextPanel(){
setLayout(new BorderLayout());
top = new TopPanel();
bottom = new JPanel();
text = new JTextField(10);
text.getDocument().addDocumentListener(new DocumentListener(){
public void insertUpdate(DocumentEvent event) { top.repaint(); }
public void removeUpdate(DocumentEvent event) { top.repaint(); }
public void changedUpdate(DocumentEvent event) {}
}
);
bottom.add(text);
add(bottom,BorderLayout.NORTH);
add(top,BorderLayout.CENTER);
}
private class TopPanel extends JPanel{
protected void paintComponent(Graphics g){
g.drawString(text.getText().trim(),10,100);
}
}

private final JPanel top;
private JPanel bottom;
private final JTextField text;
}///////////////////////////////////////////////////////////////////////////
大家可以编译运行一下,虽然功能是实现了,但是却会出现三个文本框,不知道错在哪里,
还望大家指导。

解决方案 »

  1.   

    class MyTextFrame extends JFrame{
    public MyTextFrame(){
    setTitle("My Text Test");
    setSize(400,300);
    MyTextPanel panel = new MyTextPanel();
    getContentPane().add(panel); ////////////////////
    }
    }
      

  2.   

    改了还是这样
    应该是topPanel的问题
      

  3.   

    是不是要这种效果?
    import java.util.*;
    import java.io.*;
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.event.*;
    import javax.swing.*;public class MyTextTest { 
        public static void main(String[] args) { 
    MyTextFrame frame = new MyTextFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true); }
    }class MyTextFrame extends JFrame{
    public MyTextFrame(){
    setTitle("My Text Test");
    setSize(400,300);
    MyTextPanel panel = new MyTextPanel();
    getContentPane().add(panel);
    }
    }class MyTextPanel extends JPanel{
    private final JPanel top;
    private JPanel bottom;
    private final JTextField text;

    public MyTextPanel(){
    setLayout(new BorderLayout());
    top = new TopPanel();
    // bottom = new JPanel();
    text = new JTextField(10);
    text.getDocument().addDocumentListener(new DocumentListener(){
    public void insertUpdate(DocumentEvent event) { top.repaint(); }
    public void removeUpdate(DocumentEvent event) { top.repaint(); }
    public void changedUpdate(DocumentEvent event) {}
    }
    );
    top.add(text); add(top,BorderLayout.NORTH);
    // add(bottom,BorderLayout.CENTER);
    }
    private class TopPanel extends JPanel{
    protected void paintComponent(Graphics g){
    g.drawString(text.getText().trim(),10,100);
    }
    }
    }
      

  4.   

    这种效果可以吗! 你的应该是TopPanel 的问题!
    import java.util.*;
    import java.io.*;
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.event.*;
    import javax.swing.*;public class MyTextTest { 
        public static void main(String[] args) { 
    MyTextFrame frame = new MyTextFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true); }
    }class MyTextFrame extends JFrame{
    public MyTextFrame(){
    setTitle("My Text Test");
    setSize(400,300);
    MyTextPanel panel = new MyTextPanel();
    add(panel);
    }
    }class MyTextPanel extends JPanel{
    private final JTextField t1 =new JTextField(10),
                             t2 = new JTextField(10);
    private JPanel bottom;
    public MyTextPanel(){
    setLayout(new BorderLayout());
    bottom = new JPanel();
    t1.getDocument().addDocumentListener(new DocumentListener(){
    public void insertUpdate(DocumentEvent event) { t2.setText(t1.getText());}
    public void removeUpdate(DocumentEvent event) { t2.setText(t1.getText()); }
    public void changedUpdate(DocumentEvent event) {}
    });
    bottom.add(t1);
    bottom.add(t2);
    add(bottom,BorderLayout.NORTH);
    }


    }
      

  5.   

    谢谢大家,不过可能是我没有叙述清楚,我要的结果如下:
    =======================
    top(文本框)
    bottom
    ============
    如果在top的文本框里输入任何东西,都会及时地显示在bottom上面,bottom上没有
    任何的component。