Textarea и Menubar не появляется - PullRequest
2 голосов
/ 08 марта 2011

Я новичок в java swing. Я написал простой текстовый редактор, используя java swing, я добавил текстовую область, menubar к фрейму, но когда я запускаю программу, она показывает только форму, текстовую область и строку меню не видно, для той же программы иногда она работает хорошо. Я не могу понять, что является причиной этого. Может кто-нибудь помочь мне?

Заранее спасибо! `

Вот код :-)

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);
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 08 марта 2011

Хороший вызов для публикации 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);
        }
    }
}
1 голос
/ 08 марта 2011

Сделать рамку видимой в конце конструктора.

Если вы хотите добавить компоненты в видимый контейнер, вам необходимо validate() и repaint() впоследствии, чтобы сделать изменения видимыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...