2013-06-14 2 views
0

Как можно создать JTextArea, в котором вы можете скопировать текст, который установлен?Как скопировать из JTextArea?

Простой, Cntl-C или щелчок правой кнопкой мыши в порядке.

Код предназначен для игры в плитку, над которой я работаю, и печатает информацию в TextArea. Его работы великолепны, за исключением того, что я не могу скопировать какой-либо текст.

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

Ctrl + C должен работать прямо из коробки. Щелчок правой кнопкой мыши - это еще одна история. Вы говорите, что Ctrl + C не работает для вас? – sethu

+0

Его нет, и я понятия не имею, почему. – sherrellbc

+1

Вы захватываете ключевые события для прессы где-то в своем приложении? Если это так, вы можете переопределить поведение по умолчанию. –

ответ

1

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(); 
} 
} 
+0

То, что я прочитал, но это не работает, когда я запускаю это. – sherrellbc

+0

Как сказал @sethu, если вы находитесь на Mac, вам придется пойти на другую команду http://lists.apple.com/archives/java-dev/2008/Aug/msg00053.html – Raghav

1

Или иначе вы могли бы использовать что-то вроде приведенного ниже кода.

Keymap km = area.getKeymap(); 
KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK); 
km.addActionForKeyStroke(ks, TransferHandler.getCopyAction()); 
Смежные вопросы