国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) Java Java基礎(chǔ) java中事件圖文詳解

java中事件圖文詳解

Nov 28, 2019 pm 05:35 PM
java

java中事件圖文詳解

學(xué)習(xí)java事件之前,對(duì)java內(nèi)部類、java常用組件、容器、布局管理器、java抽象窗口工具包這些東西有一定的了解,結(jié)合下面的知識(shí)點(diǎn),可以做一些簡(jiǎn)單的窗口程序。(推薦:java視頻教程

Java語(yǔ)言對(duì)事件的處理采用的是授權(quán)事件模型。在這個(gè)模型下,每個(gè)組件都有相應(yīng)的事件,如按鈕有單擊事件,文本域具有內(nèi)容改變事件等。

當(dāng)某個(gè)事件被觸發(fā)后,組件就會(huì)將事件發(fā)送給組件注冊(cè)的每一個(gè)事件監(jiān)聽(tīng)器,事件監(jiān)聽(tīng)器中定義了與不同事件相對(duì)應(yīng)的事件的處理,此時(shí)事件監(jiān)聽(tīng)器會(huì)根據(jù)不同的事件信息調(diào)用不同的事件處理者,完成對(duì)這次事件的處理,只有事件監(jiān)聽(tīng)器被觸發(fā)后才會(huì)收到事件信息。

此種模型的顯著特點(diǎn)是,當(dāng)組件被觸發(fā)后,本身不去處理,而將處理的 操作交給第三方完成。例如,在GUI單擊了一個(gè)按鈕,此時(shí)該按鈕就是一個(gè)事件源對(duì)象,按鈕本身沒(méi)有權(quán)利對(duì)這次單擊做出反應(yīng),它做的就是將信息發(fā)送給本身注冊(cè)的監(jiān)聽(tīng)器(事件的處理者,實(shí)質(zhì)上也是個(gè)類)來(lái)處理。

理解java的事件處理要要理解下面三個(gè)重要的概要。

(1)、事件Event——用戶操作而產(chǎn)生的事件

(2)、事件源Event source——產(chǎn)生事件的組件

(3)、事件處理方法Event handle——處理事件的方法

1、事件處理基本原理

擋在一個(gè)按鈕上觸發(fā)一個(gè)事件時(shí),虛擬機(jī)產(chǎn)生一個(gè)點(diǎn)擊事件對(duì)象,然后在按鈕即事件源上查找注冊(cè)的相關(guān)處理方法,并將事件對(duì)象傳給此方法,此方法獲得執(zhí)行。

示例程序:

在下面的程序中JButton jb就是事件源,ClickAction就是事件處理程序,jb.addActionListener(a);將事件源和事件處理程序關(guān)聯(lián)起來(lái),當(dāng)事件源上發(fā)生點(diǎn)擊事件的時(shí)候,執(zhí)行ClickAction里面定義的代碼。

源代碼如下:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class EventTest {

    public static void main(String[] args) {

        JFrame j = new JFrame("示例程序1");
        //1、事件源jb按鈕就是事件源,因?yàn)橐c(diǎn)擊它
        JButton jb = new JButton("click");
        //2、事件處理程序ClickAction表示事件處理程序
        ClickAction a = new ClickAction();
        //3、關(guān)聯(lián),將事件源和事件處理程序a關(guān)聯(lián)起來(lái),意思是發(fā)生點(diǎn)擊執(zhí)行a
        jb.addActionListener(a);
        //將jb源事件添加到窗口中。
        j.getContentPane().add(jb);
        j.pack();
        j.setVisible(true);
    }
}

//事件處理程序,點(diǎn)擊就是一個(gè)Action事件
class ClickAction implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        System.out.println("hello");
    }
}

2、事件對(duì)象

在上面你的例子中,ActionEvent就是一個(gè)事件對(duì)象,在JButton被按下的時(shí)候,由JButton生成此事件。事件被傳遞給通過(guò)注冊(cè)監(jiān)聽(tīng)器的方式注冊(cè)的ActionListener對(duì)象,通過(guò)它可以得到事件發(fā)生的時(shí)間,事件發(fā)生時(shí)的事件源等最常見(jiàn)的信息。

ActionEvent常見(jiàn)方法如下:

(1)String getActionCommand():返回與此類動(dòng)作相關(guān)的命令字符串,默認(rèn)組件為title。

(2)int getModifiers():返回發(fā)生此動(dòng)作時(shí)同時(shí)按下的鍵盤按鈕

(3)long getWhen():返回發(fā)生此事件時(shí)的事件的long形式。

示例程序:
源代碼如下:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class EventTest2 {

    public static void main(String[] args) {

        JFrame j = new JFrame("示例程序2");
        JPanel jp = new JPanel();
        JLabel j1 = new JLabel("請(qǐng)點(diǎn)擊");
        JButton jb = new JButton("click");
        JButton jb1 = new JButton("click");
        ClickAction2 a = new ClickAction2();
        jb1.addActionListener(a);//如果jb1上發(fā)生了Action事件就執(zhí)行a里面的代碼
        jb.addActionListener(a);
        jp.add(j1);
        jp.add(jb);
        jp.add(jb1);
        j.add(jp);
        j.setSize(400, 200);
        j.setVisible(true);

    }

}

class ClickAction2 implements ActionListener{

    //事件發(fā)生時(shí),actionPerformed方法會(huì)被虛擬機(jī)調(diào)用,事件對(duì)象回傳給該方法
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
         long d = e.getWhen();//事件發(fā)生的事件
         Date date = new Date(d);//轉(zhuǎn)化為相應(yīng)的時(shí)間
         System.out.println(date);
         JButton sou = (JButton)e.getSource();//發(fā)生的事件源
         sou.setText("點(diǎn)不著");//將點(diǎn)擊發(fā)生的按鈕的按鈕設(shè)為點(diǎn)不著
         //如果沒(méi)有設(shè)置過(guò)ActionCommand,默認(rèn)得到的是按鈕的標(biāo)題
         String com = e.getActionCommand();
         System.out.println("command is: " +com);
    }

}

3、事件類型

圖形界面開(kāi)發(fā)中由很多的事件,這些事件以EventObject為頂層和類,按事件的類型構(gòu)成了一個(gè)樹(shù)形結(jié)構(gòu)。

具體見(jiàn)下圖:

java中事件圖文詳解

EventObject是所有事件類的父類,它里面包含兩個(gè)方法:

(1)、Object getSource():最初發(fā)生Event的對(duì)象

(2)、String toString():返回此EventObject的String表示形式。

通過(guò)getSource():能夠知道事件是在那個(gè)對(duì)象上發(fā)生的。

關(guān)于其他事件類的含義,在下面會(huì)給出幾個(gè)類的源碼解釋和簡(jiǎn)單演練。

MouseEvent類

當(dāng)在一個(gè)組件上按下,釋放,點(diǎn)擊,移動(dòng)或者拖動(dòng)時(shí),就會(huì)觸發(fā)鼠標(biāo)事件。

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
public class MouseListenerTest {
    public static void main(String[] args) {
        JFrame j = new JFrame("我的窗口");
        MouL w = new MouL();
        j.addMouseListener(w);
        j.setSize(100, 100);
        j.setVisible(true);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class MouL implements MouseListener{

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠標(biāo)的位置: " + e.getX() + "," + e.getY());
        System.out.println("點(diǎn)擊發(fā)生了");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("按下");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("松開(kāi)");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠標(biāo)進(jìn)入了窗口");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("鼠標(biāo)離開(kāi)了窗口");
    }
}

WindowEvent類

窗口事件,窗口打開(kāi),關(guān)閉,最大化,最小化時(shí),都會(huì)觸發(fā)窗口事件

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

public class WindowsListenerTest {

    public static void main(String[] args) {

        JFrame j = new JFrame("我的窗口");
        WindowL w = new WindowL();
        j.addWindowListener(w);
        j.setSize(100, 100);
        j.setVisible(true);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class WindowL implements WindowListener{

    @Override
    public void windowOpened(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口打開(kāi)時(shí)我執(zhí)行windowOpened");
    }

    @Override
    public void windowClosing(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("windowClosing");
    }

    @Override
    public void windowClosed(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口關(guān)閉時(shí)我執(zhí)行windowClosed");
    }

    @Override
    public void windowIconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口最小化時(shí)我執(zhí)行windowIconified");
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口回復(fù)時(shí)我執(zhí)行windowDeiconified");
    }

    @Override
    public void windowActivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口變成活動(dòng)狀態(tài)時(shí)我執(zhí)行mouseClicked");
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
        // TODO Auto-generated method stub
        System.out.println("窗口變成不活動(dòng)狀態(tài)時(shí)我執(zhí)行windowDeactivated");
    }

}

ContainerEvent類

當(dāng)一個(gè)組件被加到容器中時(shí)或者從一個(gè)容器中刪除一個(gè)組件時(shí),會(huì)觸發(fā)事件。

import java.awt.event.ContainerListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ContainerEvent {

    public static void main(String[] args) {

        JFrame j = new JFrame("我的窗口");
        ContL w = new ContL();
        JPanel jp = new JPanel();

        jp.addContainerListener(w);

        JButton del = new JButton("刪除");
        JButton add = new JButton("add");

        jp.add(add);
        jp.add(del);//觸發(fā)組件添加了

        jp.remove(del);//觸發(fā)組件刪除了

        j.getContentPane().add(jp);
        j.setSize(100, 100);
        j.setVisible(true);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}

class ContL implements ContainerListener{

    @Override
    public void componentAdded(java.awt.event.ContainerEvent e) {
        // TODO Auto-generated method stub
        System.out.println("組件添加了");
    }

    @Override
    public void componentRemoved(java.awt.event.ContainerEvent e) {
        // TODO Auto-generated method stub
        System.out.println("組件刪除了");
    }

}

FocusEvent

鼠標(biāo)點(diǎn)擊等操作會(huì)讓一個(gè)組件得到或者失去焦點(diǎn)。當(dāng)一個(gè)組件得到焦點(diǎn)的時(shí)候,或者失去焦點(diǎn)的時(shí)候,就會(huì)觸發(fā)焦點(diǎn)事件

import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FocusTest {

    public static void main(String[] args) {

        JFrame j = new JFrame("key test");
        JPanel jp = new JPanel();
        JButton j1 = new JButton("1");
        JButton j2 = new JButton("2");
        j1.addFocusListener(new FocusL());
        j2.addFocusListener(new FocusL());
        jp.add(j1);
        jp.add(j2);
        j.add(jp);
        j.setSize(600, 500);
        j.setVisible(true);
    }

}

class FocusL implements FocusListener{

    @Override
    public void focusGained(FocusEvent e) {
        //得到FocusEvent發(fā)生時(shí)的對(duì)象,轉(zhuǎn)化為按鈕
        // TODO Auto-generated method stub
        JButton j = (JButton)e.getSource();
        //得到按鈕的標(biāo)題
        String title = j.getText();
        System.out.println("focusGained:按鈕" + title + "獲得焦點(diǎn)");
    }

    @Override
    public void focusLost(FocusEvent e) {
        // TODO Auto-generated method stub
        JButton j = (JButton)e.getSource();
        String title = j.getText();
        System.out.println("focusLost:按鈕" + title + "失去焦點(diǎn)");
    }

}

4、多重監(jiān)聽(tīng)器

一般情況下,事件源可以產(chǎn)生多種不同類型的事件,因而可以注冊(cè)(觸發(fā))多種不同類型的監(jiān)聽(tīng)器。

一個(gè)事件源組件上可以注冊(cè)多個(gè)監(jiān)聽(tīng)器,一個(gè)監(jiān)聽(tīng)器可以被注冊(cè)到多個(gè)不同的事件源上。

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class MultiListenerTest {

    public static void main(String[] args) {

        JFrame a = new JFrame("事件處理");
        JTextField jf = new JTextField();
        a.add(jf, "South");
        MouseM m = new MouseM();

        //同一事件源上注冊(cè)兩個(gè)事件監(jiān)聽(tīng)程序
        //鼠標(biāo)的監(jiān)聽(tīng)程序如點(diǎn)擊等
        a.addMouseListener(m);

        //鼠標(biāo)移動(dòng)的監(jiān)聽(tīng)程序
        a.addMouseMotionListener(m);

        a.setSize(200, 200);
        a.setVisible(true);
    }

}

class MouseM implements MouseMotionListener, MouseListener{

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("clicked" + "x:" + e.getX() + ",y:" + e.getY());
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mousePressed");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mouseRelsased");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mouseEntered");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("mouseExited");
    }

    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("拖動(dòng):" + e.getPoint());
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        // TODO Auto-generated method stub
        System.out.println("移動(dòng):" + e.getPoint());
    }

}

5、事件適配器(Event Adapter)

為簡(jiǎn)化編程,JDK針對(duì)大多數(shù)事件監(jiān)聽(tīng)器接口定義了相應(yīng)的實(shí)現(xiàn)類——事件適配器類,在適配器中,實(shí)現(xiàn)了相應(yīng)監(jiān)聽(tīng)器接口中的所有的方法,但不做任何事情。

所以定義的監(jiān)聽(tīng)器類可以繼承事件適配器類,并只重寫所需要的方法。

有如下適配器:

?- ComponentAdapter (組件適配器)

- ContainerAdapter (容器適配器)

- FocusAdapter (焦點(diǎn)適配器)

- KeyAdapter (鍵盤適配器)

- MouseAdapter (鼠標(biāo)適配器)

- MouseMotionAdapter (鼠標(biāo)運(yùn)動(dòng)適配器)

- WindowAdapter (窗口適配器)

鼠標(biāo)適配器示例程序:MouseListener中由多個(gè)方法,但在這里只實(shí)現(xiàn)了mouseClicked()

package 圖形界面設(shè)計(jì);

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;

public class AdapterTest {

    public static void main(String[] args) {

        JFrame z = new JFrame("事件適配器測(cè)試");
        z.setSize(500, 400);

        MouseLS a = new MouseLS();

        //注冊(cè)z上的鼠標(biāo)事件處理程序,發(fā)生點(diǎn)擊等事件執(zhí)行a里的代碼
        z.addMouseListener(a);
        z.setVisible(true);
        z.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class MouseLS extends MouseAdapter{

    public void mouseClicked(MouseEvent e){

        // 打印出鼠標(biāo)點(diǎn)擊時(shí)的x點(diǎn)和y點(diǎn)的坐標(biāo)
        System.out.println("鼠標(biāo)點(diǎn)擊了:" + e.getX() + "," + e.getY());
    }

}

更多java知識(shí)請(qǐng)關(guān)注java基礎(chǔ)教程欄目。

以上是java中事件圖文詳解的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開(kāi)始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過(guò)LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過(guò)DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過(guò)Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動(dòng)管理內(nèi)存的機(jī)制,通過(guò)回收不可達(dá)對(duì)象釋放堆內(nèi)存,減少內(nèi)存洩漏風(fēng)險(xiǎn)。 1.GC從根對(duì)象(如棧變量、活動(dòng)線程、靜態(tài)字段等)出發(fā)判斷對(duì)象可達(dá)性,無(wú)法到達(dá)的對(duì)像被標(biāo)記為垃圾。 2.基於標(biāo)記-清除算法,標(biāo)記所有可達(dá)對(duì)象,清除未標(biāo)記對(duì)象。 3.採(cǎi)用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時(shí)較長(zhǎng)的MajorGC;Metaspace存儲(chǔ)類元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應(yīng)用;ParallelGC提升吞吐量;CMS降

以身作則,解釋說(shuō)明 以身作則,解釋說(shuō)明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時(shí)立即求值,函數(shù)按後進(jìn)先出(LIFO)順序執(zhí)行;1.多個(gè)defer按聲明逆序執(zhí)行;2.常用於文件關(guān)閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會(huì)執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

See all articles