2011-03-08 41 views
2

我是java swing的新手。我用java swing寫了一個簡單的文本編輯器,我在框架中添加了文本區域,菜單欄,但是當我運行該程序時,它只顯示窗體,文本區域和菜單欄無法看到,對於相同的程序有時效果不錯。我無法弄清楚這是什麼原因。有人能幫幫我嗎?Textarea和菜單欄不顯示

提前感謝!`

這裏是:-)

import java.awt.BorderLayout; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class TextEditor implements ActionListener { 

    JFrame frame; 
    JTextArea textArea; 
    JScrollPane scrollPane; 
    JMenuBar menuBar; 

    public TextEditor() { 
     frame = new JFrame("Note Pad"); 
     frame.setVisible(true); 
     frame.setSize(1000, 1000); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setIconImage(Toolkit.getDefaultToolkit().getImage("image.gif")); 

     textArea = new JTextArea(500, 500); 
     scrollPane = new JScrollPane(textArea); 

     menuBar = new JMenuBar(); 

     JMenu fileMenu = new JMenu("File"); 
     JMenu editMenu = new JMenu("Edit"); 

     JMenuItem newItem = new JMenuItem("New"); 
     JMenuItem open = new JMenuItem("Open"); 
     JMenuItem save = new JMenuItem("Save"); 
     JMenuItem close = new JMenuItem("Close"); 

     JMenuItem cut = new JMenuItem("Cut"); 
     JMenuItem copy = new JMenuItem("Copy"); 
     JMenuItem paste = new JMenuItem("Paste"); 
     JMenuItem delete = new JMenuItem("Delete"); 

     newItem.addActionListener(this); 
     open.addActionListener(this); 
     save.addActionListener(this); 
     close.addActionListener(this); 

     cut.addActionListener(this); 
     copy.addActionListener(this); 
     paste.addActionListener(this); 
     delete.addActionListener(this); 

     fileMenu.add(newItem); 
     fileMenu.add(open); 
     fileMenu.add(save); 
     fileMenu.add(close); 

     editMenu.add(cut); 
     editMenu.add(copy); 
     editMenu.add(paste); 
     editMenu.add(delete); 

     menuBar.add(fileMenu); 
     menuBar.add(editMenu); 

     frame.setJMenuBar(menuBar); 
     frame.add(scrollPane, BorderLayout.CENTER); 
    } 

    public static void main(String[] args) { 
     TextEditor te = new TextEditor(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource()==menuBar.getMenu(0).getMenuComponent(0)){ 
      JFrame frame2=new JFrame(); 
      frame2.setSize(300,300); 
      frame2.setVisible(true); 
      frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
    } 
} 
+3

您應該發佈代碼,無法在沒有代碼的情況下做出任何合理評論。 – 2011-03-08 11:46:33

+0

嗨,我只是把代碼...謝謝 – 2011-03-08 12:04:42

+1

重新格式化的代碼;如果不正確請回復。 – trashgod 2011-03-08 12:18:23

回答

3

良好的電話發佈SSCCE。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class TextEditor implements ActionListener { 
    JFrame frame; 
    JTextArea textArea; 
    JScrollPane scrollPane; 
    JMenuBar menuBar; 

    public TextEditor() { 
     frame = new JFrame("Note Pad"); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setIconImage(Toolkit.getDefaultToolkit().getImage("image.gif")); 

     textArea = new JTextArea(500, 500); 
     scrollPane = new JScrollPane(textArea); 

     menuBar = new JMenuBar(); 

     JMenu fileMenu = new JMenu("File"); 
     JMenu editMenu = new JMenu("Edit"); 

     JMenuItem newItem = new JMenuItem("New"); 
     JMenuItem open = new JMenuItem("Open"); 
     JMenuItem save = new JMenuItem("Save"); 
     JMenuItem close = new JMenuItem("Close"); 

     JMenuItem cut = new JMenuItem("Cut"); 
     JMenuItem copy = new JMenuItem("Copy"); 
     JMenuItem paste = new JMenuItem("Paste"); 
     JMenuItem delete = new JMenuItem("Delete"); 

     newItem.addActionListener(this); 
     open.addActionListener(this); 
     save.addActionListener(this); 
     close.addActionListener(this); 

     cut.addActionListener(this); 
     copy.addActionListener(this); 
     paste.addActionListener(this); 
     delete.addActionListener(this); 

     fileMenu.add(newItem); 
     fileMenu.add(open); 
     fileMenu.add(save); 
     fileMenu.add(close); 

     editMenu.add(cut); 
     editMenu.add(copy); 
     editMenu.add(paste); 
     editMenu.add(delete); 

     menuBar.add(fileMenu); 
     menuBar.add(editMenu); 

     frame.setJMenuBar(menuBar); 
     frame.add(scrollPane, BorderLayout.CENTER); 

     // Very important! 
     frame.pack(); 

     // Sheesh! You kids and your enormous screens! 
     //frame.setSize(1000, 1000); 
     frame.setSize(600, 400); 
    } 

    public static void main(String[] args) { 
     // Always a good idea. 
     Runnable r = new Runnable() { 
      public void run() { 
       TextEditor te = new TextEditor(); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource()==menuBar.getMenu(0).getMenuComponent(0)) { 
      JFrame frame2=new JFrame(); 
      frame2.setSize(300,300); 
      frame2.setVisible(true); 
      frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
    } 
} 
+0

你比我快10秒。:)我提高了。 – 2011-03-08 12:15:18

+0

@Gursel Koca好主意要求代碼 - 必須給出一個「很棒的評論」投票。你超過27分鐘就打敗了我! ;) – 2011-03-08 12:18:48

+0

感謝數百萬,很好的解釋:-) – 2011-03-08 12:19:48

1

代碼使框架在構造函數的末尾可見。

如果你想組件添加到可見容器,你必須validate()repaint()它之後進行更改可見。