Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธี Implement Rounded JTextField ใน Java

JTextField เป็น subclass ของ JTextComponent เป็น component สำคัญที่สุดให้ user input text ใน single-line format JTextField class สร้าง ActionListener เมื่อพยายาม input ข้อมูล เมธอดสำคัญของ JTextField ได้แก่ setText(), getText(), setEnabled() เป็นต้น โดย default JTextField มีรูปทรงสี่เหลี่ยมผืนผ้า เราสามารถ implement round-shaped JTextField ได้โดยใช้คลาส RoundRectangle2D และ override เมธอด paintComponent()

ตัวอย่าง

import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;

public class RoundedJTextFieldTest extends JFrame {
    private JTextField tf;

    public RoundedJTextFieldTest() {
        setTitle("RoundedJTextField Test");
        setLayout(new BorderLayout());
        tf = new RoundedJTextField(15);
        add(tf, BorderLayout.NORTH);
        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String args[]) {
        new RoundedJTextFieldTest();
    }
}

// Implement round-shaped JTextField
class RoundedJTextField extends JTextField {
    private Shape shape;

    public RoundedJTextField(int size) {
        super(size);
        setOpaque(false);
    }

    protected void paintComponent(Graphics g) {
        g.setColor(getBackground());
        g.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 15, 15);
        super.paintComponent(g);
    }

    protected void paintBorder(Graphics g) {
        g.setColor(getForeground());
        g.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 15, 15);
    }

    public boolean contains(int x, int y) {
        if (shape == null || !shape.getBounds().equals(getBounds())) {
            shape = new RoundRectangle2D.Float(0, 0, getWidth() - 1, getHeight() - 1, 15, 15);
        }
        return shape.contains(x, y);
    }
}

Output

วิธี Implement Rounded JTextField ใน Java