java - 如何在 JTextArea 上添加 JScrollPane?

标签 java jscrollpane jtextarea

在这里,如果我使用构造函数,那么它不会执行任何操作并且我不想使用 setBounds() 添加滚动 Pane ,所以任何人都可以帮助我摆脱这个问题... 我的代码是...

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

class MyMenu implements ActionListener
{

    JTextField tf=new JTextField();
    JFrame jf=new JFrame("My Menu");
    JMenuBar menubar;
    JMenu menu,SubMenu;
    JMenuItem menuItem,exit;
    JScrollPane jp;
    JRadioButtonMenuItem rbMenuItem;
    JCheckBoxMenuItem cbMenuItem;

    MyMenu()
    {
        jf.add(tf);
        menubar=new JMenuBar();
        menu=new JMenu("First Menu");
        menu.setMnemonic(KeyEvent.VK_F);
        menubar.add(menu);


        jp=new JScrollPane()
        jf.add(jp);
        menuItem=new JMenuItem("Ank");
        //menuItem.setActionCommand("Ank");
        menuItem.addActionListener(this);
        KeyStroke i=KeyStroke.getKeyStroke(KeyEvent.VK_1,ActionEvent.CTRL_MASK);
        menuItem.setAccelerator(i);
        menu.add(menuItem);

        //a grp of radioButton menu items
        ButtonGroup group=new ButtonGroup();
        rbMenuItem =new JRadioButtonMenuItem("Radio Button menu item");
        rbMenuItem.setSelected(true);
        rbMenuItem.setMnemonic(KeyEvent.VK_R);
        group.add(rbMenuItem);
        rbMenuItem=new JRadioButtonMenuItem("Another one");
        rbMenuItem.setMnemonic(KeyEvent.VK_O);
        group.add(rbMenuItem);
        menu.addSeparator();

        cbMenuItem=new JCheckBoxMenuItem("A check box menu item");
        cbMenuItem.setMnemonic(KeyEvent.VK_C);
        menu.add(cbMenuItem);
        cbMenuItem=new JCheckBoxMenuItem("ANother1");
        cbMenuItem.setMnemonic(KeyEvent.VK_H);
        menu.add(cbMenuItem);

        //a submenu
        menu.addSeparator();
        SubMenu=new JMenu("A SUbmenu");
        SubMenu.setMnemonic(KeyEvent.VK_S);

        menuItem=new JMenuItem(" Item q");

        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2,ActionEvent.ALT_MASK));
        SubMenu.add(menuItem);

        menuItem=new JMenuItem("Another q");
        SubMenu.add(menuItem);
        menu.add(SubMenu);
        exit=new JMenuItem("EXIT");
        exit.addActionListener(this);
        menu.add(exit);

        //..Build a second menu.
        menu =new JMenu("another Menu");
        menu.setMnemonic(KeyEvent.VK_N);
        menubar.add(menu);
        jf.setJMenuBar(menubar);
        jf.setSize(300,400);
        jf.setVisible(true);
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getActionCommand().equals("EXIT"))
        {
            System.exit(0);
        }

        if(e.getActionCommand().equals("Ank1"))
        {
            tf.setText("helloo");
        }
    }

    public static void main(String... c)
    {
        new MyMenu();
    }
}

另外,如果我使用构造函数并将 JTextField 传递给它,那么什么也不会发生。

最佳答案

似乎对我来说工作正常......

改变了...

jf.add(tf);

jf.add(tf, BorderLayout.NORTH);

jp = new JScrollPane();

jp = new JScrollPane(new JTextArea(10, 20));

可运行的示例...

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

class MyMenu implements ActionListener {

    JTextField tf = new JTextField();
    JFrame jf = new JFrame("My Menu");
    JMenuBar menubar;
    JMenu menu, SubMenu;
    JMenuItem menuItem, exit;
    JScrollPane jp;
    JRadioButtonMenuItem rbMenuItem;
    JCheckBoxMenuItem cbMenuItem;

    MyMenu() {
        jf.add(tf, BorderLayout.NORTH);
        menubar = new JMenuBar();
        menu = new JMenu("First Menu");
        menu.setMnemonic(KeyEvent.VK_F);
        menubar.add(menu);

        jp = new JScrollPane(new JTextArea(10, 20));
        jf.add(jp);
        menuItem = new JMenuItem("Ank");
        //menuItem.setActionCommand("Ank");
        menuItem.addActionListener(this);
        KeyStroke i = KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.CTRL_MASK);
        menuItem.setAccelerator(i);
        menu.add(menuItem);

        //a grp of radioButton menu items
        ButtonGroup group = new ButtonGroup();
        rbMenuItem = new JRadioButtonMenuItem("Radio Button menu item");
        rbMenuItem.setSelected(true);
        rbMenuItem.setMnemonic(KeyEvent.VK_R);
        group.add(rbMenuItem);
        rbMenuItem = new JRadioButtonMenuItem("Another one");
        rbMenuItem.setMnemonic(KeyEvent.VK_O);
        group.add(rbMenuItem);
        menu.addSeparator();

        cbMenuItem = new JCheckBoxMenuItem("A check box menu item");
        cbMenuItem.setMnemonic(KeyEvent.VK_C);
        menu.add(cbMenuItem);
        cbMenuItem = new JCheckBoxMenuItem("ANother1");
        cbMenuItem.setMnemonic(KeyEvent.VK_H);
        menu.add(cbMenuItem);

        //a submenu
        menu.addSeparator();
        SubMenu = new JMenu("A SUbmenu");
        SubMenu.setMnemonic(KeyEvent.VK_S);

        menuItem = new JMenuItem(" Item q");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
        SubMenu.add(menuItem);

        menuItem = new JMenuItem("Another q");
        SubMenu.add(menuItem);
        menu.add(SubMenu);
        exit = new JMenuItem("EXIT");
        exit.addActionListener(this);
        menu.add(exit);

        //..Build a second menu.
        menu = new JMenu("another Menu");
        menu.setMnemonic(KeyEvent.VK_N);
        menubar.add(menu);
        jf.setJMenuBar(menubar);
        jf.pack();
        jf.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("EXIT")) {
            System.exit(0);
        }
        if (e.getActionCommand().equals("Ank1")) {
            tf.setText("helloo");
        }
    }

    public static void main(String... c) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                new MyMenu();
            }
        });
    }
}

仔细看看How to Use Scroll PanesHow to Use BorderLayout了解更多详情

关于java - 如何在 JTextArea 上添加 JScrollPane?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29425243/

相关文章:

java - JTextArea 在添加到 JPanel 时隐藏,直到单击为止

java - java接口(interface)冲突

java - 如何停止索引 Maven "target"自动生成的文件夹?

Java图形抽象drawline方法到底是如何工作的?

jquery - JScrollpane 不显示

java - JTextArea 的行号和调整 JTextArea 文本大小的问题

java - 如何在 JtextArea 中选择和检索整行文本的字符串?

java - 检查参数时舍入

java - JScrollPane 在行标题上显示图形故障。如何避免这种情况?

java - 不正确的 GridBagLayout 行为