목차
(1) 공유 코드
(2) 버튼 이벤트
(3) 테마 변경
(4) 버튼 및 키 입력
(5) 마우스 조작
Java java지도 시간 자바 그래픽 스윙 튜토리얼(2)

자바 그래픽 스윙 튜토리얼(2)

Mar 01, 2017 am 11:24 AM


스윙은 멀티스레딩, 제네릭 등과 다르게 주로 사용법에 있습니다.
다음은 주로 코드와 주석에 관한 내용이며, 말은 생략합니다.

(1) 공유 코드

JFrame을 상속하는 모든 클래스에는 이를 포함하는 시작 프레임이 있어야 합니다. 프레임은 여기에 직접 제공되지 않습니다. 반복해서 쓸 예정입니다.

package Event;import java.awt.*;import javax.swing.*;/**
 * 
 * @author QuinnNorris
 * 共用代码
 */public class BaseFrame {
    /**
     * @param args
     */
    public static void main(String[] args) {        
    // TODO Auto-generated method stub

        // 开启一个线程,所有的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件。
        EventQueue.invokeLater(new Runnable() {            
        // 匿名内部类,是一个Runnable接口的实例,实现了run方法
            public void run() {

                JFrame frame = new *********();                
                // 将*号的地方换成你实现的JFrame的子类,来实现你的代码

                frame.setExtendedState(Frame.MAXIMIZED_BOTH);                
                // 将窗口最大化

                frame.setTitle("Christmas");                
                // 设置窗口标题

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);                
                // 选择当用户关闭框架的时候进行的操作 ,在有些时候需要将窗口隐藏,不能直接退出需要用到这个方法

                frame.setVisible(true);                
                // 将窗口可见化,这样以便用户在第一次看见窗口之前我们能够向其中添加内容
            }

        });
    }

}
로그인 후 복사

출력 결과: 기본 공개 프레임워크를 얻었습니다. 나중에 콘텐츠를 다른 클래스에 작성하여 이 프레임워크에 넣을 수 있습니다.

(2) 버튼 이벤트

package Event;import java.awt.*;import javax.swing.*;import java.awt.event.*;/**
 * 
 * @author QuinnNorris 按钮事件
 */public class ButtonFrame extends JFrame {

    private JPanel buttonPanel;    
    private static final int DEFAULT_WIDTH = 300;    
    private static final int DEFAULT_HEIGHT = 200;    
    public ButtonFrame() {
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);        // 设置默认宽度和高度

        buttonPanel = new JPanel();        // 将类的实例域中的JPanel面板对象实例化

        makeButton("yellow",Color.YELLOW);
        makeButton("blue",Color.BLUE);
        makeButton("red",Color.RED);        //调用makeButton方法来创建并添加按钮

        add(buttonPanel);        // 我们将这个添加好按钮的面板添加到原框架中


    }    /**
     * 通过方法来创建按钮,并且完成关联监视器和添加入面板的操作
     * @param name 创建按钮的标识
     * @param backgroundColor 点击按钮后改变的颜色,匿名内部类只能访问final修饰的变量,所以要用final
     */
    public void makeButton(String name,final Color backgroundColor){

        JButton colorButton = new JButton(name);        
        //通过不同的标识名,我们创建按钮

        buttonPanel.add(colorButton);        
        //我们将创建的按钮添加到面板中

        //匿名内部类,创建一个ActionListener的实例
        colorButton.addActionListener(new ActionListener(){            
        /**
             * 当按钮点击的时候,会自动的调用actionPerformed方法
             */
            public void actionPerformed(ActionEvent event) {

                buttonPanel.setBackground(backgroundColor);                
                // 调用setBackground方法,设置背景颜色
            }
        });
    }

}
로그인 후 복사

출력 결과: 전체 화면 창에는 세 가지 다른 이벤트가 있습니다. 위의 색상 버튼을 누르면 배경색이 그에 따라 변경됩니다.

(3) 테마 변경

package Event;import java.awt.*;import javax.swing.*;import java.awt.event.*;/**
 * 
 * @author QuinnNorris 更换主题
 */public class MetalFrame extends JFrame {

    private JPanel buttonPanel;    
    private static final int DEFAULT_WIDTH = 300;    
    private static final int DEFAULT_HEIGHT = 200;    
    public MetalFrame() {

    
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);        // 设置默认宽度和高度

        buttonPanel = new JPanel();        // 将类的实例域中的JPanel面板对象实例化

        UIManager.LookAndFeelInfo[] infos = UIManager
                .getInstalledLookAndFeels();        // 调用这个静态方法,我们获得所有主题

        makeButton(infos);        // 调用makeButton方法来将主题实现

        add(buttonPanel);        // 我们将这个添加好按钮的面板添加到原框架中
    }    /**
     * 通过方法来创建所有的主题按钮,并且将他们关联监视器
     * 
     * @param infos
     *            包含有所有类型主题的数组
     */
    private void makeButton(final UIManager.LookAndFeelInfo[] infos) {        
    for (UIManager.LookAndFeelInfo info : infos) {
            JButton button = new JButton(info.getName());            
            // 用for-each循环来遍历所有的主题

            final UIManager.LookAndFeelInfo innerInfo = info;            
            // 将info复制并且定义位final类型,便于内部类的使用

            buttonPanel.add(button);            
            // 我们将创建的按钮添加到面板中

            // 匿名内部类,创建一个ActionListener的实例
            button.addActionListener(new ActionListener() {                
            /**
                 * 当按钮点击的时候,会自动的调用actionPerformed方法
                 */
                public void actionPerformed(ActionEvent ae) {                    
                try {

                        UIManager.setLookAndFeel(innerInfo.getClassName());                       
                        // 调用setLookAndFeel方法,更改主题

                        SwingUtilities.updateComponentTreeUI(buttonPanel);                        
                        // 通过这个静态方法,将更改的主题立即应用

                    } catch (Exception e) {                        
                    // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            });
        }

    }

}
로그인 후 복사

출력 결과: 창 위에 테마 버튼이 5개 있는데, 읽기 해당 테마의 이름을 클릭하면 해당 테마가 속한 테마가 즉시 변경됩니다.

(4) 버튼 및 키 입력

package Event;import javax.swing.*;import java.awt.*;import java.awt.event.*;/**
 * 
 * @author QuinnNorris 按钮与击键动作
 */public class ActionFrame extends JFrame {

    private JPanel buttonPanel;    
    private static final int DEFAULT_WIDTH = 300;    
    private static final int DEFAULT_HEIGHT = 200;    
    public ActionFrame() {

        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);        
        // 设置默认宽度和高度

        buttonPanel = new JPanel();        
        // 将类的实例域中的JPanel面板对象实例化

        Action yellowAction = new ColorAction("Yellow", Color.YELLOW);        
        // 创建一个自己定义的ColorAction对象yellowAction

        buttonPanel.add(new JButton(yellowAction));        
        // 创建一个按钮,其属性从所提供的 Action中获取

        add(buttonPanel);        
        // 我们将这个添加好按钮的面板添加到原框架中

        InputMap imap = buttonPanel
                .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);        
                // 我们将JPanel对象的InputMap设置为第二种输入映射,并创建该对象

        imap.put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");        
        // 在imap中通过调用击键类KeyStroke的静态方法设置击键输入ctrl+Y的组合
        // 第二个参数是一个标志参数,将这对参数用键值对的形式存入imap

        ActionMap amap = buttonPanel.getActionMap();        
        // 我们不能将InputMap直接和Action做映射,我们需要用ActionMap做过渡
        // 用JPanel中的getACtionMap方法获得amap对象

        amap.put("panel.yellow", yellowAction);        
        // 将imap中标记参数对应的击键组合和相应的Action组合起来
    }    public class ColorAction extends AbstractAction {

        /**
         * ColorAction的构造器,存放键值对
         * @param name 按钮的名称
         * @param c 按钮对应点击后显示的颜色
         */
        public ColorAction(String name, Color c) {
            putValue(Action.NAME, name);
            putValue(Action.SHORT_DESCRIPTION,                    
            "Set panel color to " + name.toLowerCase());
            putValue("color", c);            
            //在构造器中设置一些键值对映射,这些设置的属性将会被JPanel读取
        }        
        /**
         * 当按钮点击或击键的时候,会自动的调用actionPerformed方法
         */
        public void actionPerformed(ActionEvent event) {
            Color c = (Color) getValue("color");
            buttonPanel.setBackground(c);            
            // 调用setBackground方法,设置背景颜色
        }
    }
}
로그인 후 복사

출력 결과: 상단에 노란색 버튼이 있습니다. 창에서 클릭하거나 ctrl+Y를 누르면 배경이 노란색으로 변하며, 해당 창 위에 마우스를 일정 시간 올려놓으면 설명 텍스트가 표시됩니다.

(5) 마우스 조작

package Event;import javax.swing.*;/**
 * 
 * @author QuinnNorris
 * 继承JFrame的子类,将Component对象内容打包
 */public class MouseFrame extends JFrame{

    public MouseFrame(){
        add(new MouseComponent());        
        //向框架中添加一个JComponent的实例
        pack();
    }
}
로그인 후 복사
rrree

출력 결과: 이 형식에서 마우스를 한 번 클릭하면 한 변의 길이가 100픽셀인 작은 정사각형. 사각형 내에서 두 번 클릭하거나 그 이상 클릭하면 사각형이 삭제됩니다. 사각형을 클릭하고 끌 수 있으며, 사각형 영역 내부를 가리키면 마우스 포인터가 손 모양으로 변경됩니다.

스윙은 멀티스레딩, 제네릭 등과 다르게 주로 사용법에 있습니다.
다음은 주로 코드와 주석에 관한 내용이며, 말은 생략합니다.

위 내용은 Java 그래픽 Swing 튜토리얼(2) 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 날짜까지의 타임스탬프 Java의 날짜까지의 타임스탬프 Aug 30, 2024 pm 04:28 PM

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐의 양을 찾기위한 Java 프로그램 캡슐의 양을 찾기위한 Java 프로그램 Feb 07, 2025 am 11:37 AM

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

미래를 창조하세요: 완전 초보자를 위한 Java 프로그래밍 미래를 창조하세요: 완전 초보자를 위한 Java 프로그래밍 Oct 13, 2024 pm 01:32 PM

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.

See all articles