Я хочу иметь возможность щелкнуть JTextArea
и перетащить его вокруг моего JPanel
. Я не уверен, как это сделать. То, что я пытаюсь сделать, это изменить координаты x, y JTextArea
по мере его перетаскивания, я не перетаскиваю JTextArea
выше или ниже другого. Просто по экрану, аналогично перемещению текстовых полей в такой программе, как Microsoft PowerPoint.
Единственный метод, который я могу придумать, - это использовать MouseListener
, но мне интересно, есть ли более простой способ реализовать его, кроме обнаружения наведения/нажатия/перетаскивания на JTextArea
. Любые идеи о том, как я могу начать?
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class UMLEditor {
public static void main(String[] args) {
JFrame frame = new UMLWindow();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(30, 30, 1000, 700);
frame.getContentPane().setBackground(Color.white);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class UMLWindow extends JFrame {
Canvas canvas = new Canvas();
private static final long serialVersionUID = 1L;
public UMLWindow() {
addMenus();
}
public void addMenus() {
getContentPane().add(canvas);
JMenuBar menubar = new JMenuBar();
JMenuItem newTextBox = new JMenuItem("New Text Box");
newTextBox.setMnemonic(KeyEvent.VK_E);
newTextBox.setToolTipText("Exit application");
newTextBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
canvas.addTextBox();
}
});
menubar.add(newTextBox);
setJMenuBar(menubar);
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
class Canvas extends JPanel {
JTextArea commentTextArea = new JTextArea(10, 10);
public Canvas() {
this.setOpaque(true);
MyMouseAdapter myMouseAdapter = new MyMouseAdapter();
addMouseListener(myMouseAdapter);
addMouseMotionListener(myMouseAdapter);
}
public void addTextBox() {
commentTextArea.setLineWrap(true);
commentTextArea.setWrapStyleWord(true);
commentTextArea.setVisible(true);
commentTextArea.setLocation(0, 0);
this.add(commentTextArea);
commentTextArea.setBounds(0, 0, 100, 100);
revalidate();
repaint();
}
class MyMouseAdapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseMoved(MouseEvent e) {
}
}
}
JTextComponent
имеют концепцию перетаскивания, с которой вы не хотите связываться, вместо этого вы должны предоставить область вокруг компонента, из которой пользователь может щелкнуть и перетащить, что затем позволит им расположить компонент сверху. - person MadProgrammer   schedule 28.10.2014MouseMoved
->if(rectangle.contains(e.getPoint()) { System.out.println("Testing hit") }
, и он не обнаруживает наведение курсора на JTextArea. Это концептуально то, что вы имели в виду? - person Harry   schedule 28.10.2014JTextComponent
иметь функциональность, которая позволяет им перетаскивать и выбирать текст, вы не хотите конкурировать или нарушать эту функциональность - person MadProgrammer   schedule 28.10.2014