Java 允许用户;画;并调整JTextArea的大小

Java 允许用户;画;并调整JTextArea的大小,java,swing,resize,jtextarea,Java,Swing,Resize,Jtextarea,我想让用户能够用鼠标“绘制”(点击并拖动)来创建JTextArea并调整其大小。同样,我希望文本区域的大小可以调整 大概是这样的: 我想到了,但它是一个面积,而不仅仅是一个正方形 Java中有什么东西可以让我轻松地做到这一点吗?我首先想到让用户画一个矩形,然后抓取坐标和大小来创建JTextArea。但我不确定如何调整大小 编辑:“组件大小调整器/重新调整大小”是我一直在寻找的术语,我在这里添加它,以防其他人正在寻找类似的东西 通过调用JTextArea上的setBounds(…)可以很容易地调

我想让用户能够用鼠标“绘制”(点击并拖动)来创建JTextArea并调整其大小。同样,我希望文本区域的大小可以调整

大概是这样的:

我想到了,但它是一个面积,而不仅仅是一个正方形

Java中有什么东西可以让我轻松地做到这一点吗?我首先想到让用户画一个矩形,然后抓取坐标和大小来创建JTextArea。但我不确定如何调整大小


编辑:“组件大小调整器/重新调整大小”是我一直在寻找的术语,我在这里添加它,以防其他人正在寻找类似的东西

通过调用JTextArea上的setBounds(…)可以很容易地调整JTextArea的大小,或者在保存它的JScrollPane上更好,但是您需要在保存JTextArea的容器上使用null或类似(JLayeredPane)布局,并且在调整JScrollPane的大小后可能需要重新绘制容器。您还必须重新验证scrollpane的视口,以便它重新布局它所包含的文本区域

e、 g


通过调用JTextArea上的setBounds(…)可以很容易地调整JTextArea的大小,或者在保存它的JScrollPane上更好,但是您需要在保存JTextArea的容器上使用null或类似(JLayeredPane)布局,并且在调整JScrollPane的大小后可能需要重新绘制容器。您还必须重新验证scrollpane的视口,以便它重新布局它所包含的文本区域

e、 g

这不是很好,当然可以作为背景,更好的是用于,然后你可以很容易地

这不是很好,肯定可以作为背景,更好的是用于,然后你可以很容易地

你可以找到一个解决方案 我已经试过了,效果很好。在本教程中,有对另一个实现的引用

您可以找到解决方案
我已经试过了,效果很好。在本教程中,有对另一个实现的引用

您应该能够使用。

您应该能够使用。

“我想让用户能够用鼠标“绘制”(单击并拖动)来创建JTextArea并调整其大小。”这是用于拖放Java GUI编辑器吗?地球上已经有太多这样的人了。这将是拼贴环境中的一个组成部分!我想看看这些拖放编辑器,有什么特别喜欢的吗?看到不太好的也会很有趣!“这将是拼贴环境中的一个组成部分!”现在,这完全不是我所想的!拼贴画制作者是“appliverse”(应用程序领域——你能告诉我吗?)中一个优秀且值得加入的新成员。“我想看看这些拖放编辑器,有什么喜欢的吗?”没有。我没有。“看到不太好的东西也会很有趣!”Netbeans有一个,并且有Eclipse、AFAIU的插件,尽管我怀疑它们中的任何一个的代码对您的工作都会有很大帮助。“我想让用户能够用鼠标“绘制”(点击并拖动)来创建和调整JTextArea的大小。”这是用于拖放Java GUI编辑器的吗?地球上已经有太多这样的人了。这将是拼贴环境中的一个组成部分!我想看看这些拖放编辑器,有什么特别喜欢的吗?看到不太好的也会很有趣!“这将是拼贴环境中的一个组成部分!”现在,这完全不是我所想的!拼贴画制作者是“appliverse”(应用程序领域——你能告诉我吗?)中一个优秀且值得加入的新成员。“我想看看这些拖放编辑器,有什么喜欢的吗?”没有。我没有。“看到不太好的插件也会很有趣!”Netbeans有一个,并且有Eclipse、AFAIU的插件,尽管我怀疑它们中的任何一个的代码对您的工作都会有很大帮助。谢谢!这是非常有帮助的,正是我一直在寻找的绘图部分!谢谢这是非常有帮助的,正是我一直在寻找的绘图部分!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class ResizeableTextArea extends JPanel {
   private static final int PREF_WIDTH = 700;
   private static final int PREF_HEIGHT = 500;
   private static final int ROWS = 60;
   private static final int COLS = 80;
   private static final Color RECT_COLOR = new Color(180, 180, 255);

   private JTextArea textArea = new JTextArea(ROWS, COLS);
   private JScrollPane scrollPane = new JScrollPane(textArea);
   private int x, y, width, height;
   private boolean drawRect = false;

   public ResizeableTextArea() {
      setLayout(null);
      add(scrollPane);

      MyMouseAdapter myMouseAdapter = new MyMouseAdapter(); 
      addMouseListener(myMouseAdapter);
      addMouseMotionListener(myMouseAdapter);
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      if (drawRect) {
         g.setColor(RECT_COLOR);
         g.drawRect(x, y, width, height);         
      }
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_WIDTH, PREF_HEIGHT);
   }

   private class MyMouseAdapter extends MouseAdapter {
      private int innerX, innerY;

      @Override
      public void mousePressed(MouseEvent e) {
         x = e.getX();
         y = e.getY();
         innerX = x;
         innerY = y;
         width = 0;
         height = 0;
         drawRect = true;
      }

      @Override
      public void mouseDragged(MouseEvent e) {
         calcBounds(e);

         drawRect = true;
         ResizeableTextArea.this.repaint();
      }

      @Override
      public void mouseReleased(MouseEvent e) {
         calcBounds(e);

         drawRect = false;
         scrollPane.setBounds(x, y, width, height);
         scrollPane.getViewport().revalidate();
         ResizeableTextArea.this.repaint();

      }

      private void calcBounds(MouseEvent e) {
         width = Math.abs(innerX - e.getX());
         height = Math.abs(innerY - e.getY());
         x = Math.min(innerX, e.getX());
         y = Math.min(innerY, e.getY());
      }

   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("ResizeableTextArea");
      frame.getContentPane().add(new ResizeableTextArea());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}