Java 如何从JTextArea复制?

Java 如何从JTextArea复制?,java,swing,copy,set,jtextarea,Java,Swing,Copy,Set,Jtextarea,如何创建一个JTextArea,您可以在其中复制设置的文本 简单,Cntl-C或右键单击复制即可 这段代码是我正在制作的一个平铺游戏的代码,它将信息打印到文本区域。它的作品很棒,只是我不能复制任何文本 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TileHelper{ static JFrame frame; static JButton getTile, end, start

如何创建一个JTextArea,您可以在其中复制设置的文本

简单,Cntl-C或右键单击复制即可

这段代码是我正在制作的一个平铺游戏的代码,它将信息打印到文本区域。它的作品很棒,只是我不能复制任何文本

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


public class TileHelper{

static JFrame frame;
static JButton getTile, end, start;
static JTextField field;
static JTextArea area;
static JScrollPane scroller;
static Container pane;
static JCheckBox manual;
static JComboBox numList;
static Insets insets;
static String newTile;
static boolean startLoop, firstTime = true;
static int numTiles;
public Tile previous, current;
static final String[] intString = {"4","5","6","7","8","9","10"};


public void buildGUI() {

    //build our test gui & components
    frame = new JFrame("TileHelper");
    frame.setSize(680, 240);

    manual = new JCheckBox("Get Manually");
    getTile = new JButton("Get Tile");
    end = new JButton("End");
    start = new JButton("Start");
    numList = new JComboBox(intString);
    numList.setSelectedIndex(0);
    field = new JTextField(10);
    field.setText("Enter Name");
    area = new JTextArea(670, 175);
    area.setEditable(true);
    area.setText("Press Start below after selection.");

    //set font
    area.setFont(new Font("Serif", Font.PLAIN, 16));

    scroller = new JScrollPane(area);
    scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

    pane = frame.getContentPane();
    pane.setLayout(null);
    pane.add(manual);
    pane.add(getTile);
    pane.add(end);
    pane.add(field);
    pane.add(start);
    pane.add(scroller);
    pane.add(numList);

    insets = pane.getInsets();

    scroller.setBounds(insets.left + 5, insets.top + 5, 670, 175);
    start.setBounds(insets.left + 5, scroller.getY() + scroller.getHeight() + 5, getTile.getPreferredSize().width, getTile.getPreferredSize().height);
    getTile.setBounds(insets.left + start.getX() + start.getWidth() + 5, scroller.getY() + scroller.getHeight() + 5, getTile.getPreferredSize().width, getTile.getPreferredSize().height);
    end.setBounds(insets.left + getTile.getX() + getTile.getWidth() + 5, scroller.getY() + scroller.getHeight() + 5, end.getPreferredSize().width, end.getPreferredSize().height);
    numList.setBounds(insets.left + end.getX() + end.getWidth() + 5, scroller.getY() + scroller.getHeight() + 6, numList.getPreferredSize().width + 6, numList.getPreferredSize().height);
    field.setBounds(insets.left + numList.getX() + numList.getWidth() + 5, scroller.getY() + scroller.getHeight() + 6, field.getPreferredSize().width, field.getPreferredSize().height);
    manual.setBounds(insets.left + 550, scroller.getY() + scroller.getHeight() + 6, manual.getPreferredSize().width, manual.getPreferredSize().height);

    getTile.addActionListener(new getListener());
    end.addActionListener(new endListener());
    start.addActionListener((new startListener()));
    frame.setResizable(false);
    frame.setVisible(true);
}


public static class startListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
        if (!manual.isSelected()) {
            startLoop = true;
        }

        if (field.getText().equals("Enter Name")) {
            area.setText("You must name your array");
        } else area.setText("Tile " + field.getText() ");
    }
}

public static class endListener implements ActionListener{
    public void actionPerformed(ActionEvent event) {
        area.append(" };");
        area.selectAll();
        area.copy();
    }
}

public static class getListener implements ActionListener{
    public void actionPerformed(ActionEvent event) {
        if (firstTime) {
            newTile = String.format("new Tile" );
            numTiles++;
            firstTime = false;
        } else {
            if (++numTiles % 3 == 0){
                newTile = String.format(",\n\t new Tile" );
            } else newTile = String.format(", new Tile" );
        }
        area.append(newTile);
    }
}

JTextArea有一个默认行为,您可以按ctrl+c将文本复制到剪贴板

下面是我刚才从你上面的问题中复制的代码,我运行了它。Ctrl+C仍然可以正常工作

import java.awt.Container;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

public class TileHelper
{

static JFrame frame;
static JButton getTile, end, start;
static JTextField field;
static JTextArea area;
static JScrollPane scroller;
static Container pane;
static JCheckBox manual;
static JComboBox numList;
static Insets insets;
static String newTile;
static boolean startLoop, firstTime = true;
static int numTiles;
static final String[] intString = { "4", "5", "6", "7", "8", "9", "10" };

public void buildGUI()
{

    // build our test gui & components
    frame = new JFrame( "TileHelper" );
    frame.setSize( 680, 240 );

    manual = new JCheckBox( "Get Manually" );
    getTile = new JButton( "Get Tile" );
    end = new JButton( "End" );
    start = new JButton( "Start" );
    numList = new JComboBox( intString );
    numList.setSelectedIndex( 0 );
    field = new JTextField( 10 );
    field.setText( "Enter Name" );
    area = new JTextArea( 670, 175 );
    area.setEditable( true );
    area.setText( "Press Start below after selection." );

    // set font
    area.setFont( new Font( "Serif", Font.PLAIN, 16 ) );

    scroller = new JScrollPane( area );
    scroller.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
    scroller.setVerticalScrollBarPolicy( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );

    pane = frame.getContentPane();
    pane.setLayout( null );
    pane.add( manual );
    pane.add( getTile );
    pane.add( end );
    pane.add( field );
    pane.add( start );
    pane.add( scroller );
    pane.add( numList );

    insets = pane.getInsets();

    scroller.setBounds( insets.left + 5, insets.top + 5, 670, 175 );
    start.setBounds( insets.left + 5, scroller.getY() + scroller.getHeight() + 5, getTile.getPreferredSize().width,
                     getTile.getPreferredSize().height );
    getTile.setBounds( insets.left + start.getX() + start.getWidth() + 5, scroller.getY() + scroller.getHeight() + 5,
                       getTile.getPreferredSize().width, getTile.getPreferredSize().height );
    end.setBounds( insets.left + getTile.getX() + getTile.getWidth() + 5, scroller.getY() + scroller.getHeight() + 5,
                   end.getPreferredSize().width, end.getPreferredSize().height );
    numList.setBounds( insets.left + end.getX() + end.getWidth() + 5, scroller.getY() + scroller.getHeight() + 6,
                       numList.getPreferredSize().width + 6, numList.getPreferredSize().height );
    field.setBounds( insets.left + numList.getX() + numList.getWidth() + 5, scroller.getY() + scroller.getHeight() + 6,
                     field.getPreferredSize().width, field.getPreferredSize().height );
    manual.setBounds( insets.left + 550, scroller.getY() + scroller.getHeight() + 6, manual.getPreferredSize().width,
                      manual.getPreferredSize().height );

    getTile.addActionListener( new getListener() );
    end.addActionListener( new endListener() );
    start.addActionListener( ( new startListener() ) );
    frame.setResizable( false );
    frame.setVisible( true );
}

public static class startListener implements ActionListener
{
    public void actionPerformed(ActionEvent e) 
    {
        if (!manual.isSelected()) 
        {
            startLoop = true;
        }

        if (field.getText().equals("Enter Name")) 
        {
            area.setText("You must name your array");
        } 
        else 
        {
            area.setText( "Tile" + field.getText() );
        }
    }
}

public static class endListener implements ActionListener
{
    public void actionPerformed( ActionEvent event )
    {
        area.append( " };" );
        area.selectAll();
        area.copy();
    }
}

public static class getListener implements ActionListener
{
    public void actionPerformed( ActionEvent event )
    {
        if( firstTime )
        {
            newTile = String.format( "new Tile" );
            numTiles++;
            firstTime = false;
        }
        else
        {
            if( ++numTiles % 3 == 0 )
            {
                newTile = String.format( ",\n\t new Tile" );
            }
            else
                newTile = String.format( ", new Tile" );
        }
        area.append( newTile );
    }
}

public static void main( String[] args )
{
    TileHelper helper = new TileHelper();
    helper.buildGUI();
}
}

JTextArea有一个默认行为,您可以按ctrl+c将文本复制到剪贴板

下面是我刚才从你上面的问题中复制的代码,我运行了它。Ctrl+C仍然可以正常工作

import java.awt.Container;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

public class TileHelper
{

static JFrame frame;
static JButton getTile, end, start;
static JTextField field;
static JTextArea area;
static JScrollPane scroller;
static Container pane;
static JCheckBox manual;
static JComboBox numList;
static Insets insets;
static String newTile;
static boolean startLoop, firstTime = true;
static int numTiles;
static final String[] intString = { "4", "5", "6", "7", "8", "9", "10" };

public void buildGUI()
{

    // build our test gui & components
    frame = new JFrame( "TileHelper" );
    frame.setSize( 680, 240 );

    manual = new JCheckBox( "Get Manually" );
    getTile = new JButton( "Get Tile" );
    end = new JButton( "End" );
    start = new JButton( "Start" );
    numList = new JComboBox( intString );
    numList.setSelectedIndex( 0 );
    field = new JTextField( 10 );
    field.setText( "Enter Name" );
    area = new JTextArea( 670, 175 );
    area.setEditable( true );
    area.setText( "Press Start below after selection." );

    // set font
    area.setFont( new Font( "Serif", Font.PLAIN, 16 ) );

    scroller = new JScrollPane( area );
    scroller.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
    scroller.setVerticalScrollBarPolicy( ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS );

    pane = frame.getContentPane();
    pane.setLayout( null );
    pane.add( manual );
    pane.add( getTile );
    pane.add( end );
    pane.add( field );
    pane.add( start );
    pane.add( scroller );
    pane.add( numList );

    insets = pane.getInsets();

    scroller.setBounds( insets.left + 5, insets.top + 5, 670, 175 );
    start.setBounds( insets.left + 5, scroller.getY() + scroller.getHeight() + 5, getTile.getPreferredSize().width,
                     getTile.getPreferredSize().height );
    getTile.setBounds( insets.left + start.getX() + start.getWidth() + 5, scroller.getY() + scroller.getHeight() + 5,
                       getTile.getPreferredSize().width, getTile.getPreferredSize().height );
    end.setBounds( insets.left + getTile.getX() + getTile.getWidth() + 5, scroller.getY() + scroller.getHeight() + 5,
                   end.getPreferredSize().width, end.getPreferredSize().height );
    numList.setBounds( insets.left + end.getX() + end.getWidth() + 5, scroller.getY() + scroller.getHeight() + 6,
                       numList.getPreferredSize().width + 6, numList.getPreferredSize().height );
    field.setBounds( insets.left + numList.getX() + numList.getWidth() + 5, scroller.getY() + scroller.getHeight() + 6,
                     field.getPreferredSize().width, field.getPreferredSize().height );
    manual.setBounds( insets.left + 550, scroller.getY() + scroller.getHeight() + 6, manual.getPreferredSize().width,
                      manual.getPreferredSize().height );

    getTile.addActionListener( new getListener() );
    end.addActionListener( new endListener() );
    start.addActionListener( ( new startListener() ) );
    frame.setResizable( false );
    frame.setVisible( true );
}

public static class startListener implements ActionListener
{
    public void actionPerformed(ActionEvent e) 
    {
        if (!manual.isSelected()) 
        {
            startLoop = true;
        }

        if (field.getText().equals("Enter Name")) 
        {
            area.setText("You must name your array");
        } 
        else 
        {
            area.setText( "Tile" + field.getText() );
        }
    }
}

public static class endListener implements ActionListener
{
    public void actionPerformed( ActionEvent event )
    {
        area.append( " };" );
        area.selectAll();
        area.copy();
    }
}

public static class getListener implements ActionListener
{
    public void actionPerformed( ActionEvent event )
    {
        if( firstTime )
        {
            newTile = String.format( "new Tile" );
            numTiles++;
            firstTime = false;
        }
        else
        {
            if( ++numTiles % 3 == 0 )
            {
                newTile = String.format( ",\n\t new Tile" );
            }
            else
                newTile = String.format( ", new Tile" );
        }
        area.append( newTile );
    }
}

public static void main( String[] args )
{
    TileHelper helper = new TileHelper();
    helper.buildGUI();
}
}

或者您可以使用下面代码中的类似内容

Keymap km = area.getKeymap();
KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK);
km.addActionForKeyStroke(ks, TransferHandler.getCopyAction());

或者您可以使用下面代码中的类似内容

Keymap km = area.getKeymap();
KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK);
km.addActionForKeyStroke(ks, TransferHandler.getCopyAction());
尝试:

字符串str

str=TTextarea.getText()

看到这个有趣的链接了吗 !

试试看:

字符串str

str=TTextarea.getText()

看到这个有趣的链接了吗 !

这对我有效(与Raghav的答案相同,但它将复制映射到Command-C而不是Control-C,这是大多数Mac用户所期望的)

这对我很有效(与Raghav的答案相同,但它将复制映射到Command-C而不是Control-C,这是大多数Mac用户所期望的)


Ctrl+C应该可以立即使用。右键单击复制是另一个故事。你是说Ctrl+C不适合你吗?我不知道为什么。你在应用程序的某个地方捕获按键事件吗?如果是这样,您可能已经覆盖了默认行为。我将对此进行调查。谢谢你的建议。也许这听起来很愚蠢。但是我不得不问。。你在用Mac电脑吗?然后它将是Command+C。Ctrl+C应该可以立即工作。右键单击复制是另一个故事。你是说Ctrl+C不适合你吗?我不知道为什么。你在应用程序的某个地方捕获按键事件吗?如果是这样,您可能已经覆盖了默认行为。我将对此进行调查。谢谢你的建议。也许这听起来很愚蠢。但是我不得不问。。你在用Mac电脑吗?然后是Command+C。这是我读过的,但是当我运行它时它不起作用。正如@sethu所说的,如果你在Mac上,你必须使用不同的命令,这是我读过的,但是当我运行它时它不起作用。正如@sethu所说,如果你在Mac上,你必须使用不同的命令