Java 如何确定JTextField的大小? 我正在做一个涉及毕达哥拉斯定理的程序,想在中间留下一个三角形,在它的三个边上有三个JTrdfield。我做到了,但问题是,当我创建JTextField并将其添加到所需的容器中时,它是巨大的。这是一个非常大的白色矩形,当我点击进入时,会得到一个小字母。所以,我的问题是:如何更改这个JTextField的大小以减小它并避免不必要的大小? 我免费使用Swing和AWT库! 代码示例: Container content = window.getContentPane(); Contaiiner grid = new JPanel(); grid.setLayout(new GridLayout(3,3)); grid.add(new JTextField());

Java 如何确定JTextField的大小? 我正在做一个涉及毕达哥拉斯定理的程序,想在中间留下一个三角形,在它的三个边上有三个JTrdfield。我做到了,但问题是,当我创建JTextField并将其添加到所需的容器中时,它是巨大的。这是一个非常大的白色矩形,当我点击进入时,会得到一个小字母。所以,我的问题是:如何更改这个JTextField的大小以减小它并避免不必要的大小? 我免费使用Swing和AWT库! 代码示例: Container content = window.getContentPane(); Contaiiner grid = new JPanel(); grid.setLayout(new GridLayout(3,3)); grid.add(new JTextField());,java,swing,jtextfield,layout-manager,Java,Swing,Jtextfield,Layout Manager,好的,这个简单的代码,给你一个JTextField的例子,当我执行than(使用main方法和更多…)时,JTextField非常非常大,所以,我想减少它。诚然,它涉及到对你意图的一些猜测,但下面是一个我认为你想要实现的例子: 它是一个包含一些点的面板的程序,在每对点之间放置一个文本字段。文本字段的排列方式使其左上角保持在各自边缘的中心。使用鼠标拖动点时,文本字段的位置将相应更新。(在本例中,文本字段包含点之间的距离-即边长度-但这仅用于说明) 导入java.awt.Color; 导入java

好的,这个简单的代码,给你一个JTextField的例子,当我执行than(使用main方法和更多…)时,JTextField非常非常大,所以,我想减少它。

诚然,它涉及到对你意图的一些猜测,但下面是一个我认为你想要实现的例子:

它是一个包含一些点的面板的程序,在每对点之间放置一个文本字段。文本字段的排列方式使其左上角保持在各自边缘的中心。使用鼠标拖动点时,文本字段的位置将相应更新。(在本例中,文本字段包含点之间的距离-即边长度-但这仅用于说明)

导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.event.MouseMotionListener;
导入java.awt.geom.Ellipse2D;
导入java.awt.geom.Line2D;
导入java.awt.geom.Point2D;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SwingUtilities;
公共类TriangleTextFieldsTest
{
公共静态void main(字符串[]args)
{
SwingUtilities.invokeLater(新的Runnable()
{
@凌驾
公开募捐
{
新的TriangleTextFieldsTest();
}
});
}
public TriangleTextFieldsTest()
{
JFrame=新JFrame();
frame.getContentPane().add(新的TriangleTextFieldsPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架设置尺寸(800800);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
}
类TriangleTextFieldsPanel扩展了JPanel
实现MouseListener、MouseMotionListener
{
私人最终名单点;
私有最终列表文本字段;
私有点2d draggedPoint=null;
TriangleTextFieldsPanel()
{
超级(空);
points=新的ArrayList();
添加(新的Point2D.Double(250250));
添加(新的Point2D.Double(750250));
添加点(新点2D.Double(500500));
textFields=newarraylist();

对于(int i=0;i无可否认,这涉及到对您意图的一些猜测,但下面是一个我认为您想要实现的示例:

这是一个包含一些点的面板的程序,在每对点之间放置一个文本字段。文本字段的排列方式使其左上角保持在各自边缘的中心。当用鼠标拖动这些点时,文本字段的位置会相应地更新。(在本例中,文本字段包含点之间的距离-即边长度-但这仅用于说明)

导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.event.MouseMotionListener;
导入java.awt.geom.Ellipse2D;
导入java.awt.geom.Line2D;
导入java.awt.geom.Point2D;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JTextField;
导入javax.swing.SwingUtilities;
公共类TriangleTextFieldsTest
{
公共静态void main(字符串[]args)
{
SwingUtilities.invokeLater(新的Runnable()
{
@凌驾
公开募捐
{
新的TriangleTextFieldsTest();
}
});
}
public TriangleTextFieldsTest()
{
JFrame=新JFrame();
frame.getContentPane().add(新的TriangleTextFieldsPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架设置尺寸(800800);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
}
类TriangleTextFieldsPanel扩展了JPanel
实现MouseListener、MouseMotionListener
{
私人最终名单点;
私有最终列表文本字段;
私有点2d draggedPoint=null;
TriangleTextFieldsPanel()
{
超级(空);
points=新的ArrayList();
添加(新的Point2D.Double(250250));
添加(新的Point2D.Double(750250));
添加点(新点2D.Double(500500));
textFields=newarraylist();

对于(int i=0;i请共享一些示例代码,使其更清晰,此处没有代码,但我可以做一个!看看这可能有助于您指定百分比大小。您可以发布一个示例代码?@peeskilletIf如果您有一个面板,其中您正在绘制某些东西(三角形)在
paintComponent
方法中,如果您希望将文本字段放置在“任意”位置(例如三角形边缘的中心),则这可能是极少数必须使用
null
-布局管理器的情况之一。任何布局管理器都不能将组件排列在“任意”位置位置,基于画的地方…请分享一些示例代码,使它更清晰,这里没有代码,但我可以做一个!看看这个可能
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TriangleTextFieldsTest
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new TriangleTextFieldsTest();
            }
        });
    }

    public TriangleTextFieldsTest()
    {
        JFrame frame = new JFrame();
        frame.getContentPane().add(new TriangleTextFieldsPanel());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800,800);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}


class TriangleTextFieldsPanel extends JPanel
    implements MouseListener, MouseMotionListener
{
    private final List<Point2D> points;
    private final List<JTextField> textFields;
    private Point2D draggedPoint = null;

    TriangleTextFieldsPanel()
    {
        super(null);

        points = new ArrayList<Point2D>();
        points.add(new Point2D.Double(250,250));
        points.add(new Point2D.Double(750,250));
        points.add(new Point2D.Double(500,500));

        textFields = new ArrayList<JTextField>();

        for (int i=0; i<points.size(); i++)
        {
            JTextField t = new JTextField(10);
            textFields.add(t);
            add(t);
        }

        updateTextFieldPositions();
        updateTextFieldContents();

        addMouseListener(this);
        addMouseMotionListener(this);
    }

    private void updateTextFieldPositions()
    {
        for (int i=0; i<points.size(); i++)
        {
            Point2D p0 = points.get(i);
            Point2D p1 = points.get((i+1)%points.size());

            JTextField textField = textFields.get(i);
            int cx = (int)(0.5 * (p1.getX() + p0.getX()));
            int cy = (int)(0.5 * (p1.getY() + p0.getY()));

            Dimension d = textField.getPreferredSize();
            textField.setBounds(cx, cy, d.width, d.height);
        }
    }

    private void updateTextFieldContents()
    {
        for (int i=0; i<points.size(); i++)
        {
            Point2D p0 = points.get(i);
            Point2D p1 = points.get((i+1)%points.size());

            JTextField textField = textFields.get(i);
            double d = p0.distance(p1);
            textField.setText(String.format("%.2f", d));
        }
    }


    @Override
    protected void paintComponent(Graphics gr)
    {
        super.paintComponent(gr);
        Graphics2D g = (Graphics2D)gr;
        g.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,  
            RenderingHints.VALUE_ANTIALIAS_ON);
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, getWidth(), getHeight());

        g.setColor(Color.BLUE);
        drawPoints(g, points);

        g.setColor(Color.BLACK);
        for (int i=0; i<points.size(); i++)
        {
            Point2D p0 = points.get(i);
            Point2D p1 = points.get((i+1)%points.size());
            g.draw(new Line2D.Double(p0,p1));
        }
    }

    static void drawPoints(Graphics2D g, List<Point2D> points)
    {
        double r = 3;
        for (Point2D point : points)
        {
            double x = point.getX();
            double y = point.getY();
            g.fill(new Ellipse2D.Double(
                x-r, y-r, r+r, r+r));
        }
    }


    @Override
    public void mouseDragged(MouseEvent e)
    {
        if (draggedPoint != null)
        {
            draggedPoint.setLocation(e.getPoint());
            updateTextFieldPositions();
            updateTextFieldContents();            
            repaint();
        }
    }

    @Override
    public void mouseMoved(MouseEvent e)
    {
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
        draggedPoint = null;
        double thresholdSquared = 10*10;
        double minDs = Double.MAX_VALUE;
        for (Point2D point : points)
        {
            double ds = point.distanceSq(e.getPoint());
            if (ds < thresholdSquared && ds < minDs)
            {
                minDs = ds;
                draggedPoint = point;
            }
        }
    }

    @Override
    public void mouseReleased(MouseEvent e)
    {
        draggedPoint = null;
    }

    @Override
    public void mouseEntered(MouseEvent e)
    {
    }

    @Override
    public void mouseExited(MouseEvent e)
    {
    }
}