我正在尝试创建一个三角形按钮。
我不知道该怎么做,所以我需要创建方面的帮助,请向我解释如何创建它!
这是我想要实现的目标:
有什么想法吗?
最佳答案
根据to this ,看来您只需继承 JButton 并重写 paintBorder()
和 contains()
方法
我创建了这个不那么快速和肮脏的例子。我以为会更快,但我花了大约 15 分钟才完成。
视觉上看起来很平坦,因为我使用相同的边框并始终绘制相同的内容,但您可能希望为鼠标悬停、单击、启用、禁用等提供不同的表示。
如果运行此代码,当您实际单击三角形内部时,您可能会看到仅执行“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/