2011-03-08 97 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()它之后进行更改可见。