如何确定JTextField的大小? [英] How to determine the size of a JTextField?

查看:84
本文介绍了如何确定JTextField的大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个涉及勾股定理的程序,想在中间留下一个三角形,在它的三个侧面周围有三个JTextField.我做到了,但是问题是当我创建JTextField并将其添加到所需的容器中时,它是巨大的.这是一个非常大的白色矩形,当我单击输入时,会得到一个小写字母.因此,我的问题是:如何更改此JTextField的大小以减小它并避免不必要的大小? P.S:..免费使用Swing和AWT库! 代码示例:

I'm doing a program involving the Pythagorean theorem, and wanted to leave a triangle in the middle, with three JTextField around three sides of it. I did it, but the problem is that when I create the JTextField and add it to the desired container, it is immense. It is a very large white rectangle that when I click to enter, get a small letter. So, my question is: How can I change the size of this JTextField to decrease it and avoid unnecessary sizes? P.S:.'m Using Swing and AWT library for free! Example of code:

Container content = window.getContentPane();
Contaiiner grid = new JPanel();
grid.setLayout(new GridLayout(3,3));
grid.add(new JTextField());

好吧,这个简单的代码为您提供了一个JTextField的示例,当我执行时(比起main方法等等),JTextField很大,所以,我想减少它.

Well, this simple code, gives to you one example of the JTextField, when i executes than (with main method and more...) the JTextField is very very big, so, i want to decrease it.

推荐答案

诚然,它涉及您的意图的一些猜测,但这是我认为您想要实现的目标的一个示例:

Admittedly, it involves some guesses about your intention, but here is an example of what I think that you want to achieve:

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

It's a program that contains a panel with some points, and between each pair of points, it places a text field. The text fields are arranged so that their upper left corner remains at the center of the respective edge. When the points are dragged with the mouse, the locations of the text fields are updated accordingly. (In this example, the text fields contain the distance between the points - that is, the edge lengths - but this is just for illustration).

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)
    {
    }
}

这篇关于如何确定JTextField的大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆