programing

Java의 선언적 GUI 프로그래밍에 대한 제안

nicescript 2021. 1. 15. 07:52
반응형

Java의 선언적 GUI 프로그래밍에 대한 제안


Java에서 선언적 GUI 프로그래밍에 대한 제안이 있는지 궁금합니다. (나는 시각적 기반 GUI 생성자 / 편집기 소프트웨어를 싫어하지만 JPanels 및 Boxes 및 JLabels 및 JLists 등을 수동으로 인스턴스화하는 데 약간 지쳤습니다.)

이것이 제 전체적인 질문이지만 제가 생각하는 접근 방식에 대해 두 가지 구체적인 질문이 있습니다.

  1. JavaFX : 다양한 요소에 액세스하고 업데이트하는 Java 소스 파일과 인터페이스 할 수있는 JavaFX의 실제 GUI 디스플레이 (예 : 원과 직사각형이 아니라 목록 상자와 버튼 및 레이블 등)의 예가 있습니까?

  2. XUL-ish XML을 파싱 할 무언가를 가진 Plain Old Swing : 누구든지 Java Swing과 함께 사용할 XML 용 선언적 구문 (XUL과 같은)을 발명 한 적이 있습니까? XML 파일을 읽고, Swing 요소의 계층 구조를 인스턴스화하고, 일종의 객체 모델을 통해 계층 구조에 액세스 할 수 있도록하는 STaX 기반 코드를 만드는 것이 어렵지 않을 것이라고 생각합니다. 그러나 나는 그러한 것을 직접 발명하기보다는 잘 알려져 있고 문서화되고 테스트 된 것을 사용하고 싶습니다.

  3. JGoodies Forms- 정확히 선언적이지는 않지만 약간 가깝고 JGoodies Binding에서 행운을 빕니다. 그러나 Form Layout에 대한 구문은 다소 애매 해 보입니다.

편집 : 여기에 많은 훌륭한 답변이 있습니다! (& 나는 위의 # 3을 추가했습니다.) 실제 응용 프로그램에 이러한 프레임 워크 중 하나를 사용하여 경험 한 경험을 들어 주셔서 특히 감사합니다.

추신 몇 가지 Google 검색 ( "java gui 선언적")을 시도했지만 무엇을 찾아야할지 몰랐습니다.


당신은 javabuilders를 살펴볼 수 있습니다 ; 스윙 UI를 구축하기 위해 YAML사용합니다 .

매뉴얼 의 간단한 예 [PDF] :

JFrame:
    name: myFrame
    title: My Frame
    content:
        - JLabel:
            name: myLabel2
            text: My First Label
        - JLabel:
            name: myLabel2
            text: My Second Label

또는 :

JFrame:
    name: myFrame
    title: My Frame
    content:
        - JLabel: {name: myLabel2, text: My First Label}
        - JLabel: {name: myLabel2, text: My Second Label}

또는:

JFrame(name=myFrame,title=My Frame):
    - JLabel(name=myLabel2, text=My First Label)
    - JLabel(name=myLabel2, text=My Second Label)

필요한 작업을 수행하는 도구 인 CookSwing의 작성자로서 실제 구현을 수행하기 전에이 주제에 대해 자세히 살펴 보았습니다. 저는 생계를 유지하면서 Java Swing GUI 애플리케이션을 작성했습니다.

IMO, Java Swing 구성 요소를 설명하기 위해 모든 종류의 명령형 프로그래밍 언어를 사용하려는 경우 Java를 사용하는 것이 좋습니다. Groovy 등은 많은 단순화없이 복잡한 문제 만 추가합니다.

선언적 언어가 훨씬 낫습니다. 프로그래머가 아닌 사람도 이해할 수 있기 때문입니다. 특히 특정 레이아웃의 미세 조정 작업을 아티스트에게 위임해야 할 때 더욱 그렇습니다. XML은 단순성, 가독성 및 사용할 수있는 많은 편집기 / 변환 도구 등으로 인해 선언적 언어 (다른 선택보다)에 적합합니다.

다음은 특정 순서가 아닌 선언적 GUI 프로그래밍에서 직면 한 문제입니다. 이러한 문제는 CookSwing에서 해결되었습니다.

  1. 가독성과 단순성. (JavaFX는 XML보다 간단하지 않습니다. XML의 닫는 태그는 읽기에 상당히 도움이되며 일반적으로 XML 편집기가 자동으로 수행하므로 추가 입력을 추가하지 않습니다.)
  2. 확장 성. 사용자 정의 Swing 구성 요소가 사소하지 않은 프로젝트에 대해 나타날 것이기 때문에 매우 중요합니다.
  3. GUI 레이아웃. 또한 매우 중요합니다. BorderLayout, GridBagLayout, JGoodies FormsLayout 등을 처리 할 수 ​​있다는 것은 사실상 필수입니다.
  4. 복사 / 붙여 넣기의 단순성. 레이아웃을 디자인하는 과정에서 다른 것을 시도해 볼 필요가 있습니다. 따라서 사물을 복사 / 붙여 넣기 및 이동할 수 있어야합니다. 구성 요소 및 레이아웃의 계층 구조를 쉽게 볼 수 있으므로 XML이 더 좋습니다. JavaFX는 여러 줄 속성 및 들여 쓰기 문제로 인해 다소 문제가 있습니다. 좋은 편집기는 필수이며 좋은 XML 편집기가 많이 있습니다.
  5. 템플릿 (즉, 다른 레이아웃 파일을 포함 할 수 있음)은 일관된 모양에 매우 유용합니다. 예를 들어, 대화 상자, 버튼 패널 등의 일관된 모양을 원할 수 있습니다.
  6. Java 코드와의 상호 작용. 이것은 매우 중요합니다. 일부 GUI 구성 요소는 이유에 관계없이 Java 코드로만 생성 할 수 있습니다. 따라서 이러한 개체를로드 할 수 있어야합니다. 또한 XML 코드 내에서 리스너 및 기타 Java 객체 / 구성 요소를 직접 연결할 수 있어야합니다. ID를 사용하여 나중에 연결하는 것은 매우 지루하기 때문에 잘 작동하지 않습니다.
  7. 국제화 (i18n). 하드 코딩 된 텍스트가 아닌 리소스 번들에서 텍스트 / 문자열을로드 할 수 있습니다. 이 기능은 일부 응용 프로그램에서 중요 할 수 있습니다.
  8. 현지화 (l10n). 선언적 프로그래밍 (특히 XML 사용)의 장점은 특정 로케일에 대해 다른 GUI 형식으로 전환 할 수 있다는 것입니다. Java 또는 다른 명령형 언어로 코딩하는 경우 그렇게 쉽지 않습니다.
  9. 오류 확인 / 허용. 초기 디자인에는 종종 여기저기서 오류가 포함됩니다. 때때로 오류는 해당 Java 코드가 아직 설계되지 않았기 때문일 수 있습니다. 또는 아이콘 리소스가 없습니다. 명령형 코딩으로 오류를 처리하는 것은 매우 지루합니다. 따라서 오류를 찾을 수 있지만 동시에 오류를 허용하는 것이 바람직하므로 GUI 레이아웃의 미리보기를 가능한 한 빨리 만들 수 있습니다.
  10. GUI 구성 요소 교체. 즉, JTextField가 있던 텍스트 필드를 더 멋진 버전의 구성 요소로 교체하십시오. 대화 상자의 의미를 JDialog 대신 멋진 UI 대화 상자 (예 : JIDE)로 바꿉니다. 이 기능은 상당한 노력을 절약 할 수 있습니다. XML 자체는 XSLT 및 기타 변환 도구로 인해 유용합니다.
  11. 스윙 너머. 조만간 많은 구성 요소 구성이 배열, 아이콘, 이미지, 벡터 등과 같은 객체 유형을 사용한다는 것을 알게 될 것입니다.

간결함이 중요한 경우 이중 중괄호 관용구를 고려할 수 있습니다.

new JFrame("My Frame") {{
    setName("myFrame");
    add(new JLabel("My First Label") {{
         setName("myLabel2");
    }};
    add(new JLabel("My Second Label") {{
         setName("myLabel2");
    }};
}}

그런 다음 잘 알려진 범용 프로그래밍 언어의 힘을 잃지 않습니다 (필요할 것이라는 것을 알고 JellyTags는 짜증납니다). 필요한 것은 약간의 추가 관용구뿐입니다.

It's not used very much, because actually people pissing around with XML weren't solving real pain points.

In general you can use builder layers to abstract repeated code. GUI code doesn't have to be badly written, it's just that almost all of it is (including in text books).


I strongly recommend MiG Layout - it takes a few days to get used to the syntax, but once you've got it, it works wonders. I used JGoodies Forms for quite awhile, and Karsten's builder concept works well, but it is a bit cryptic... MiG is easier to pick up, and results in wonderfully concise code.


If you're willing to step slightly outside plain Java, Groovy's "builder" concept works pretty well with GUIs. Of course you can interop between Groovy and Java fairly easily. See the Swing Builder page for more information.


give Swiby a try: http://swiby.codehaus.org/

"Swiby is a blend of Swing and Ruby for truly rich distributed applications." In other words Swiby is a domain specific language mixing swing and ruby.


SDL/Swing does exactly what you need. Its a tiny (283k), unobtrusive, easy to learn declarative Swing framework.

menus {
    "File" {
        "Open" do="open" // calls "open()" in the controller
        "---"
        "Exit" do="exit"
    }
}

SDL/Swing is open source but enjoys commercial support. We (Ikayzo.com) developed it over a period of years and have deployed it in production systems for many customers ranging from life science companies to banks.


I can find the following examples of what you're asking for:


I recently come across SDL / Swing.


something new...XWT, will be included in eclipse e4


I've tried many solutions, such as SWIXML, Javabuilders, MigLayout, Cookswing. I finally found the javaFX and javaFX-Scenebuilder the best an fastest solution, XML-based GUI tool. you'd like the way scenebuilder creates GUI (with drag & drop items!). plus, it uses CSS (Cascading Style Sheets) for the GUI theme. Jsut trust the Oracle, it's the best GUI tool for java applications. take a tour for creating javaFX apps with scenebuilder, here: http://docs.oracle.com/javafx/scenebuilder/1/get_started/prepare-for-tutorial.htm#CEGJBHHA


Although it is not declarative and is limited exclusively to layouts, you might want to take a look at DesignGridLayout which allows to programmatically define Swing layouts in a very concise manner (it's open source).

Main advantages:

  • easy and quick to learn.
  • concise code (1 line of code per row of components in a form) that also enable easy maintenance
  • compile-time checking (which declarative UI can't have)
  • respect of platform look & feel (baseline alignment, gaps between components...) without any hard-coded length value

As often, it's always a good idea to perform a search when you're looking for something. This is the first link in google while looking for "java xml gui"


WindowBuilder, it a very nice plugin, which included GWT,XWT,SWT,Swing etc

ReferenceURL : https://stackoverflow.com/questions/761237/suggestions-for-declarative-gui-programming-in-java

반응형