java - 在Java中创建三角形按钮

标签 java swing button geometry

我正在尝试创建一个三角形按钮。

我不知道该怎么做,所以我需要创建方面的帮助,请向我解释如何创建它!

这是我想要实现的目标:

enter image description here

有什么想法吗?

最佳答案

根据to this ,看来您只需继承 JButton 并重写 paintBorder()contains() 方法

我创建了这个不那么快速和肮脏的例子。我以为会更快,但我花了大约 15 分钟才完成。

a triangular jbutton

视觉上看起来很平坦,因为我使用相同的边框并始终绘制相同的内容,但您可能希望为鼠标悬停、单击、启用、禁用等提供不同的表示。

如果运行此代码,当您实际单击三角形内部时,您可能会看到仅执行“Click”文本:

import java.awt.Polygon;
import java.awt.Shape;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

class TriangleButton extends JButton {
    private Shape triangle = createTriangle();

    public void paintBorder( Graphics g ) {
        ((Graphics2D)g).draw(triangle);
    }
    public void paintComponent( Graphics g ) {
        ((Graphics2D)g).fill(triangle);
    }
    public Dimension getPreferredSize() {
        return new Dimension(200,100);
    }
    public boolean contains(int x, int y) {
        return triangle.contains(x, y);
    }

    private Shape createTriangle() {
        Polygon p = new Polygon();
        p.addPoint( 0   , 100 );
        p.addPoint( 100 , 0   );
        p.addPoint( 200 ,100  );
        return p;
    }
}

public class A {

    public static void main( String ... args ) {
        JFrame frame = new JFrame();
        final JButton b =  new TriangleButton();
        b.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Click!");
            }
        });
        frame.add( new JPanel(){{add(b);}} );
        frame.setVisible(true);

    }
}

关于java - 在Java中创建三角形按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924356/

相关文章:

Javascript 用按钮触发请求?

c# - C# .NET 中的表单

java - 如何在不阻塞计时器(Java Swing)的情况下暂停程序执行?

Java 继承和构造函数参数

java - 显式编写用于将数据插入 JTable Swing 的类

Java:如何让 fireTableStructureChanged 改变一个 AbstractTableModel?

java - JButton 和 jgraphx 不会同时出现

java - 使用 java 中的 swing 解析具有某些可选属性的 HTML TD 标签

java - 结合版本 1 和版本 4 UUID 的想法是个好主意吗?

html - 删除换行词