2014-10-27 38 views
0

左右的時間內添加一個JTextArea來的JPanel,我創建一個新的Canvas (JPanel)類:Canvas canvas = new Canvas();,然後我呼籲該類中的方法:現在canvas.addTextBox();從面板

,從這個Canvas類中,我想添加一個新的jTextArea到畫布上。我嘗試使用下面的代碼,但它沒有顯示出來。不知道我做錯了什麼。謝謝!

class Canvas extends JPanel { 

    public Canvas() { 
     this.setOpaque(true); 
     //this.setBackground(Color.WHITE); 
    } 

    public void addTextBox() { 
     final JTextArea commentTextArea = new JTextArea(10, 10); 
     commentTextArea.setLineWrap(true); 
     commentTextArea.setLineWrap(true); 
     commentTextArea.setWrapStyleWord(true); 
     commentTextArea.setVisible(true); 
    } 

} 

全碼

import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 

public class UMLEditor { 

    public static void main(String[] args) { 
     JFrame frame = new UMLWindow(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBounds(30, 30, 1000, 700); 
     frame.getContentPane().setBackground(Color.white); 
     frame.setVisible(true); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
class UMLWindow extends JFrame { 
    Canvas canvas = new Canvas(); 

    private static final long serialVersionUID = 1L; 

    public UMLWindow() { 
     addMenus(); 
    } 
    public void addMenus() { 

     getContentPane().add(canvas); 

     JMenuBar menubar = new JMenuBar(); 

     JMenuItem newTextBox = new JMenuItem("New Text Box"); 
     newTextBox.setMnemonic(KeyEvent.VK_E); 
     newTextBox.setToolTipText("Exit application"); 
     newTextBox.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent event) { 
       canvas.addTextBox(); 
      } 
     }); 

     menubar.add(newTextBox); 

     setJMenuBar(menubar); 

     setSize(300, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
} 

class Canvas extends JPanel { 

    public Canvas() { 
     this.setOpaque(true); 
     //this.setBackground(Color.WHITE); 
    } 

    public void addTextBox() { 
     final JTextArea commentTextArea = new JTextArea(10, 10); 
     commentTextArea.setLineWrap(true); 
     commentTextArea.setLineWrap(true); 
     commentTextArea.setWrapStyleWord(true); 
     commentTextArea.setVisible(true); 
    } 

} 
+1

您必須將其添加到面板。你現在擁有的只是創建JTextArea和一些setter。 – Luminous 2014-10-27 17:28:14

回答

3

addTextBox方法只創建一個JTextArea。它從來沒有把它添加到JPanel

您將需要添加下面一行到addTextBox方法:

add(commentTextArea); 

如果其中包含你的組件JFrame已經可見,在屏幕上時,addTextBox方法被調用,你也需要使容器無效。只需添加

revalidate(); 
repaint(); 
+0

我必須通知任何已添加JTextArea的東西嗎?這有效,但它只顯示當我調整大小/移動JFrame – Harry 2014-10-27 17:47:46

+0

@哈里:你需要'(重新)驗證()'封閉的容器,可能'repaint()',[例子](http: //stackoverflow.com/a/5812981/230513)。 – trashgod 2014-10-27 17:49:42

+0

@哈里我更新了我的答案,包括這 – Robin 2014-10-27 17:50:42