簡體   English   中英

在Java中創建三角形按鈕

[英]Creating Triangle button In Java

我正在嘗試創建一個三角形按鈕。

我不知道怎么做,所以我需要幫助創建,請向我解釋如何創建它!

這是我想要實現的目標:

在此輸入圖像描述

有任何想法嗎?

這個 ,它看起來像你只需要繼承JButton,並覆蓋paintBorder()contains()方法

我創建這個不是那么快又臟的例子。 我覺得它會更快但是我花了大約15分鍾就來了。

一個三角形的jbutton

視覺上看起來很平坦,因為我總是使用相同的邊框並且繪制相同的邊框,但是您可能希望為onmouse提供不同的表示,包括,單擊,啟用,禁用等。

如果您運行此代碼,您可能會看到在實際單擊三角形內部時僅執行“單擊”文本:

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);

    }
}

您可能只想擴展JButton並覆蓋.paint(Graphics g)方法(擴展JComponent在語義上是不正確的,並且可能會導致其他框架出現問題,因為這一個按鈕)。 paint是將按鈕“繪制”到屏幕上的代碼所在的位置。 如果您添加自定義代碼以按照您希望的方式繪制按鈕,它將在屏幕上以不同的方式顯示。 您可能希望為按鈕實現java.awt.event.MouseListener ,以便在用戶將鼠標懸停在按鈕上或單擊它時,可以為按鈕提供不同的效果。

從另一個答案中,您將要覆蓋contains(int x, int y)以便可點擊區域反映按鈕的實際形狀。

但這不是你想要做的快速事情,你可以抓住現成的Java制作,你必須自己制作並且它非常復雜但非常可行。

使用swingGUI創建自定義GUI按鈕更加困難。 簡而言之,在netbeans IDE中的按鈕上創建一個三角形

public class TriangleButton extends javax.swing.JFrame {


public TriangleButton() {
    initComponents();
}

private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton1.setIcon(new javax.swing.ImageIcon("triangle.png")); 
    jButton1.setText("text1");
    jButton1.setActionCommand("hii");
    jButton1.setBorder(null);
    jButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    jButton1.setMargin(new java.awt.Insets(0, 0, 0, 0));
    jButton1.setPressedIcon(new javax.swing.ImageIcon("triangle.png")); 
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(104, 104, 104)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(90, Short.MAX_VALUE))
    );
    jPanel1Layout.setVerticalGroup(
        jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jPanel1Layout.createSequentialGroup()
            .addGap(52, 52, 52)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(93, Short.MAX_VALUE))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
    );

    pack();
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    System.out.println("Hiiiiii");
}                                        


public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TriangleButton().setVisible(true);
        }
    });
}


private javax.swing.JButton jButton1;
private javax.swing.JPanel jPanel1;


![http://i.stack.imgur.com/KUPWQ.jpg][1]}

我知道沒有標准組件可以做到這一點,你需要創建自己的組件。

擴展一個類似的或只是擴展jpanel。

http://www.programmersheaven.com/mb/java/247058/247058/draw-a-triangle/給出了繪制三角形的一些代碼。

要使它更像“按鈕”,你需要一個聽眾。

假設我們正在談論Swing,你最好的選擇是獲取JComponent源代碼 ,並修改_ paintImmediately方法來繪制一個三角形而不是一個矩形。

創建自己的Java GUI庫可能會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM