Java java지도 시간 Java Swing을 사용하여 XML 편집기 만들기(3)

Java Swing을 사용하여 XML 편집기 만들기(3)

Dec 20, 2016 pm 01:42 PM

크로스 플랫폼, 오픈 리소스 XML 편집기를 찾고 계시다면 곧 이러한 바람을 실현하실 수 있을 것입니다. 세 부분으로 구성된 이 시리즈에서는 가장 일반적인 Java 2 Swing 구성 요소 중 일부를 사용하여 간단한 XML 편집기를 개발하는 과정을 안내합니다. 이 시리즈는 자신만의 XML 편집기를 작성하려는 사람들이나 Swing을 배우거나 복습하는 데 도움이 되는 사람들에게 도움이 될 것입니다.
 

 이 시리즈의 세 번째 기사입니다. 첫 번째 기사에서는 XML과 트리 구조가 XML 표시에 적합한 이유, XML 데이터 처리 방법, JTree Swing 구성 요소 사용 방법에 대해 간략하게 설명했으며 XML 파일을 구문 분석하고 JTree Display에서 사용하기 위해 재사용 가능한 구성 요소도 구축했습니다. .

두 번째 기사에서는 XML 편집기의 뼈대 구조를 만들었습니다. 이를 위해 우리는 다양한 Swing 구성 요소(jsplitPane, JScrollPane, JButton 및 JTextArea 포함)에 대해 이야기했습니다. JSplitPane 객체에는 두 개의 JScrollPane 객체가 포함되어 있습니다. 하나는 XML 그래픽 탐색용이고 다른 하나는 텍스트 탐색용입니다.

이 마지막 기사에서는 XML 편집기에 최종 인터페이스를 추가하여 더욱 사용자 친화적으로 만들겠습니다. 먼저 메뉴 시스템을 구축한 다음 XML 파일을 저장하고 새 문서를 열 수 있도록 기본 파일 시스템에 액세스하는 JFileChooser 구성 요소를 계속 구성합니다. 마지막으로 사용자가 명령을 취소하고 응용 프로그램을 종료할 수 있게 해주는 JDialog 상자를 구축하겠습니다.

그렇다면 메뉴를 활용하고, 파일 시스템에 액세스하고, 사용자가 작업을 취소할 수 있도록 Swing 애플리케이션의 성능을 어떻게 향상시킬 수 있을까요? 애플리케이션의 메뉴를 처리하기 위한 JMenu 컴포넌트, 기본 파일 시스템에 액세스하기 위한 JFileChooser 컴포넌트, 사용자가 작업을 취소할 수 있도록 하는 JDialog 상자를 생성해야 합니다.

이전 기사에서는 XML 데이터를 그래픽 트리로 표시할 수 있는 JTree 클래스에서 파생된 재사용 가능한 컴포넌트인 XTree 클래스를 개발했습니다. 우리는 객체지향 원칙을 사용하기를 좋아하기 때문에 오늘 우리가 변경하는 내용은 해당 클래스에 영향을 미치지 않습니다. 우리는 객체지향 원칙을 사용하기를 좋아하기 때문에 오늘 우리가 변경하는 내용은 해당 클래스에 영향을 미치지 않습니다. 이는 결합되지 않고 JFrame 컨테이너에서 사용되는 자체 포함된 재사용 가능한 클래스입니다.

섹션 1 메뉴 구성요소 작성

JMenu 구성요소에는 메뉴 표시줄, 하나 이상의 메뉴, 하나 이상의 메뉴 항목 등 여러 개체가 포함됩니다. 메뉴 표시줄에는 메뉴 항목이 포함된 메뉴가 포함되어 있습니다. 이러한 Swing 구성 요소의 이름은 매우 직관적입니다(각각 JMenuBar, JMenu 및 JMenuItem).

단일 메뉴 항목을 포함하는 최소 "파일" 메뉴를 생성하는 전체 코드는 다음과 같습니다.

JMenu fileMenu = new JMenu( "File" );
JmenuItem exitItem = new JMenuItem ( "종료" );

fileMenu.add(exitItem);

JmenuBar menuBar = new JMenuBar();

menuBar.add( fileMenu );

setJMenuBar( menuBar );

우리는 이 프로세스에 매우 익숙해야 합니다. JMenu 구성 요소는 다른 Java GUI 구성 요소가 빌드될 때 생성됩니다. 가장 안쪽 요소는 모든 요소에 적절한 컨테이너가 정의될 ​​때까지 바로 상위 요소에 추가됩니다.

XmlEditor 사례 연구로 돌아가서 실제로 새 XML 파일 생성, 기존 파일 열기, 파일 저장 및 종료 기능을 갖춘 완전한 파일 메뉴를 만들었습니다. 이에 대해서는 다음 섹션에서 더 자세히 설명하겠습니다.

섹션 2 메뉴 이벤트 처리

우리는 사용자가 새 문서를 만들고, 기존 파일을 열고, 현재 파일을 저장하고, 응용 프로그램을 종료할 수 있는 일반적인 파일 메뉴를 만들고 싶습니다. 이제 이 메뉴를 만드는 방법을 알았으니 사용자의 메뉴 선택에 어떻게 반응해야 할까요? 다른 Swing 구성 요소와 마찬가지로 답은 이벤트 모델과 사용 가능한 리스너 구성 요소에 있습니다.

메뉴 선택을 처리하는 가장 기본적인 방법은 메뉴 항목에 액션 리스너를 추가하는 것입니다. 복잡한 이벤트 처리를 처리할 때(메뉴 시스템이 매우 변경될 수 있으므로) 복잡함), 이벤트 핸들러는 별도의 클래스로 정의되어야 합니다. 위에 제공된 예에서는 exitMenuHandler 유형의 작업 리스너를 추가합니다. 이 유형은 이 애플리케이션의 뒷부분에서 정의됩니다. 다음은 exitMenuHandler 클래스를 정의하는 데 필요한 최소 코드입니다.

classexitMenuHandler Implements ActionListener {
public void actionPerformed( ActionEvent ae ) {
System.exit(0);
}
}

이 구현은 단일 클래스의 정의를 보여주기에는 지나치게 단순해 보일 수 있지만 파일 열기 및 저장을 위한 이벤트 처리 코드를 정의하면 별도의 기능에 익숙해질 수 있습니다. 속성을 별도의 클래스 파일로 분리합니다. 또한 이 접근 방식을 사용하면 다양한 애플리케이션에서 공통 메뉴 기능을 재사용할 수 있습니다.

섹션 3 파일 시스템 액세스 구성 요소 구축

이 Java 애플리케이션은 사용자가 그래픽 파일 시스템 브라우저를 통해 파일 시스템에 액세스할 수 있도록 허용해야 하는 경우가 많습니다. 일반적으로 이는 사용자가 구성 요소나 파일을 열거나 저장하기를 원하기 때문입니다. XmlEditor 응용 프로그램에서는 사용자가 이 작업을 수행할 수 있기를 원합니다.

기본 파일 시스템에 액세스하기 위해 javax.swing 패키지에는 매우 유용한 구성 요소인 JFileChooser 구성 요소가 있습니다. 의심할 바 없이 JFileChooser 구성 요소를 활용하기 전에 이미 Swing 응용 프로그램을 사용해 본 적이 있을 것입니다.

JFileChooser를 생성하려면 먼저 JFileChooser 객체를 인스턴스화하고 크기를 설정한 다음 파일을 열거나 파일을 저장하는 데 사용하도록 선언합니다. 이 개체를 해당 부모(활성화하는 데 사용된 개체(이 경우 메뉴 항목))에 연결한 다음 대화 상자를 열거나 대화 상자를 저장하도록 설정합니다. 이를 수행하려면 int 반환 값을 반환하는 showSaveDialog() 또는 showOpenDialog() 메서드를 사용합니다. 다음은 간단한 예입니다.

JFileChooser jfc = new JFileChooser();
jfc.setSize( 500, 250 );
Container parent = openItem.getParent();
int choice = jfc.showOpenDialog(parent);

마지막 줄에 반환된 정수 값은 사용자가 최종적으로 파일을 열거나 저장했는지 또는 취소 버튼을 눌렀는지 여부를 나타냅니다. 열기/저장 이벤트에 대한 응답으로 이 정수 값은 JFileChooser 클래스에 정의된 APPROVE_OPTION 상수와 비교할 수 있습니다. 이 시점에서는 사용자가 요청한 파일을 열거나 저장하기 위해 적절한 방법을 사용하기만 하면 됩니다.

이 애플리케이션의 전체 구현인 코드 조각 1을 참조하세요. 여기에는 XmlEditor 애플리케이션의 메뉴 처리 기능을 구성하는 데 사용되는 6가지 메서드가 모두 포함되어 있습니다.

섹션 4 선택 사항을 검증하기 위한 대화 상자 구성 요소 구축

이제 Jframe의 닫기 창을 클릭하면 애플리케이션이 즉시 닫힙니다. 이것은 좋지 않습니다. 사용자가 파일 작업 중에 실수로 창을 닫은 경우 어떻게 되나요? 우리는 사용자에게 메시지를 표시하고 정말로 애플리케이션을 닫을 것인지 묻고 싶습니다.

JDialog 대화 상자를 사용하여 이 목적을 달성할 수 있습니다. 모든 그래픽 응용 프로그램은 이를 사용하여 다른 파일을 덮어쓰기 전, 저장하지 않고 파일을 닫기 전, 응용 프로그램을 닫기 전에 사용자에게 경고할 수 있습니다. 프로그래밍을 단순화하기 위해 우리는 편집기를 닫을 때 사용자에게 상기시키는 데 중점을 둡니다.

우리가 해야 할 일은 JDialog 대화 상자를 만드는 것뿐입니다. 이 대화 상자에는 Jlabel이 포함되어 있으며 하나는 프로그램을 닫는 명령을 수신하고 다른 하나는 취소하는 단추입니다. 프로그램을 닫는 명령입니다. 다음은 이 구성 요소를 구성하는 코드입니다.

JDialog verifyDialog = new JDialog( this, "Confirm Exit", true );
Jlabel 질문 = new JLabel( "종료하시겠습니까? " ) ;
Jbutton okButton = new JButton( "OK" );
okButton.addActionListener( this );
Jbutton cancelButton = new JButton( "Cancel" );
cancelButton.addActionListener( this ) ;
verifyDialog.getContentPane().setLayout( new FlowLayout() );
verifyDialog.getContentPane().add( 질문 );
verifyDialog.getContentPane().add( okButton );
verifyDialog .getContentPane ().add( cancelButton );
verifyDialog.hide();

이제 해야 할 일이 두 가지 남았습니다. 이 두 버튼에 대한 이벤트 처리 코드를 작성하고 창 닫기 이벤트 동작을 해당 버튼으로 바꿔야 합니다. 이 두 버튼을 처리하는 데 있어서 확인을 누르면 응용 프로그램을 닫고 취소를 누르면 대화 상자를 숨깁니다.

마지막 단계는 기본 창 닫기 이벤트 동작을 재정의하는 것입니다. 기본적으로 대화 상자를 만들고 사용자가 취소 버튼을 클릭하더라도 JFrame은 여전히 ​​창 닫기 이벤트를 받습니다. 이렇게 하면 다음 설정으로 재정의하지 않는 한 JFrame이 숨겨집니다.

setDefaultCloSEOperation( JFrame.DO_NOTHING_ON_CLOSE )

새 설정은 창 닫기 이벤트에 대한 응답으로 절대 닫히지 않습니다. . System.exit() 호출에 대한 응답으로만 닫힙니다.

메뉴 구성 요소를 추가하고, 메뉴 이벤트에 대한 이벤트 핸들러를 정의하고, 예기치 않은 창 닫기 이벤트를 취소하는 메서드를 추가하고 나면 애플리케이션을 테스트하고 XML 파일 생성, 편집 및 저장을 시작할 수 있습니다.

축하합니다! 축하해요! 이미 손으로 작성한 Swing 기반 XML 편집기가 있습니다. 나머지 작업은 귀하에게 달려 있습니다. 이를 확인하고 견고성을 높이고 몇 가지 새로운 기능을 추가해야 할 수도 있습니다.

첨부 파일: 코드 조각 1

class newMenuHandler가 ActionListener를 구현합니다
{
public void actionPerformed( ActionEvent ae )
{
textArea.setText( "" );
try
{ // 새 XTree 만들기
xTree = new XTree();
xTree.getSelectionModel().setSelectionMode(
HowsRootHandles ( true );
  // 추가 이 도구의 고급 버전으로 JTree
 xTree.setEditable( false );
 }
수정이 가능합니다.  catch( 예외 ex )
  {
   String message = ex.getMessage();
   ex.printStackTrace();
  }
  file://结束try/catch
 }
 file://结束actionPerformed()
}
file://结束class newMenuHandler
클래스 openMenuHandler는 ActionListener를 구현합니다
{
 JFileChooser jfc;
 Container parent;
int choice;
 openMenuHandler()
 {
  super();
  jfc = new JFileChooser();
  jfc.setSize( 400,300 );
  jfc.setFileFilter( new X ml파일필터( ) );
  parent = openItem.getParent(); }
  file://结束openMenuHandler()
  class openMenuHandler는 ActionListener를 구현합니다
  {
   JFileChooser jfc;
   Container parent;
   int 선택;

   openMenuHandler()
   {
    super();
    jfc = new JFileChooser();
    jfc.setSize( 400,300 );
    j fc.setFileFilter( new XmlFileFilter() );
 
parent = openItem.getParent();
   }
 public void actionPerformed( ActionEvent ae )
 {

  choice = jfc.showOpenDialog( parent );
 
  if( 선택 == JFileChooser.APPROVE_OPTION )
  {
   String fileName, line;
   BufferedReader reader;

   fileName = jfc.getSelectedFile().getAbsolutePath();

   시도해보세요
   {
    reader = new BufferedReader(
    new FileReader( fileName ) );

    textArea.setText( reader.readLine() + " " );

    동안(( line = reader.readLine() ) != null )
    {
     textArea.append( line + " " );
    }
   reader.close();

   x트리. 새로 고침( textArea.getText() );
  }
  catch ( 예외 ex )
  {
   String message = ex.getMessage();
   ex.printStackTrace();
  }

  jfc.setCurrentDirectory( new File( fileName ) );
  }

 }
}
클래스 saveMenuHandler는 ActionListener를 구현합니다
 {
  JFileChooser jfc;
  컨테이너 부모;
  int 선택;

  saveMenuHandler()
  {
   super();
   jfc = new JFileChooser();
   jfc.setSize( 400,300 ) ;
jfc.setFileFilter (new xmlfileFilter ());
parent = saveItem.getParent ();
}
public void actionPerformed (ActionEvent ae)  
  choice = jfc.showSaveDialog( parent );

  if ( choice == JFileChooser.APPROVE_OPTION )
  {
   String fileName;
   파일 fO bj;
   FileWriter 작가 ;

   fileName = jfc.getSelectedFile().getAbsolutePath();

   try
   {
    writer = new FileWriter( fileName );

    textArea.write ( 작가 );

    writer.close();
   }
   catch ( IOException ioe )
   {
    ioe.printStackTrace();
   }
   jfc. setCurrentDirectory( new File( fileName ) );
  }

 }
}

exitMenuHandler 클래스가 ActionListener를 구현합니다
{
 public void actionPerformed( ActionEvent ae )
 {
  verifyDialog.show();
 }
}
class XmlFileFilter는 javax.swing.filechooser.FileFilter를 확장합니다
{
 public boolean accept( File fobj )
 {
  if ( fobj.isDirectory() )
   return true;
  else
   return fobj.getName().endsWith( ".xml" );
  }

공개 String getDescription()
{
 return "*.xml";
}


 以上就是使사용Java Swing 创建一个XML编辑器(三)的内容,更多相关内容请关注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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++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