IT

여러 JFrame 사용:좋은 방법인가 나쁜 방법인가?

itgroup 2023. 1. 12. 22:10
반응형

여러 JFrame 사용:좋은 방법인가 나쁜 방법인가?

이미지를 표시하고 데이터베이스의 소리를 재생하는 어플리케이션을 개발하고 있습니다.GUI에서 데이터베이스에 이미지를 추가할 때 별도의 JFrame을 사용할지 여부를 결정하려고 합니다.

JFrame 창을 여러 개 사용하는 것이 좋은 방법인지 궁금할 뿐입니다.

JFrame을 여러 개 사용하는 것이 좋은 방법인지 궁금할 뿐입니다.

나쁜 버릇(나쁜, 나쁜 습관.

  • 사용자 불친절:하나의 아이콘만 표시되어야 할 경우 태스크바에 여러 개의 아이콘이 표시됩니다.게다가 코딩 문제로 인한 부작용도..
  • 코드화 및 유지보수의 악몽:
    • 모달 대화상자는 해당 대화상자의 내용에 주의를 집중할 수 있는 쉬운 기회를 제공합니다. 즉, 선택/수정/취소한 후 계속 진행합니다.여러 프레임은 그렇지 않습니다.
    • 부모를 클릭하면 부모와의 대화 상자(또는 부동 도구 모음)가 앞에 나타납니다. 원하는 동작일 경우 프레임으로 구현해야 합니다.

1개의 GUI에 많은 요소를 표시하는 방법에는 다음과 같은 여러 가지가 있습니다.

  • CardLayout (짧은 데모).최적의 용도:
    1. 대화 상자처럼 마법사를 표시합니다.
    2. 연관된 구성 요소가 있는 항목의 목록, 트리 선택 항목 등을 표시합니다.
    3. 컴포넌트 없음과 표시 컴포넌트 간 전환
  • JInternalFrame/JDesktopPane 일반적으로 MDI에 사용됩니다.
  • JTabbedPane 컴포넌트 그룹의 경우.
  • JSplitPane 사용자의 조작에 따라 중요도(크기)가 달라지는 2개의 컴포넌트를 표시하는 방법.
  • JLayeredPane 훨씬 많은 구성 요소들이 있습니다.
  • JToolBar 에는 일반적으로 액션 또는 컨트롤 그룹이 포함되어 있습니다.사용자의 필요에 따라 GUI를 드래그하거나 완전히 삭제할 수 있습니다.위에서 설명한 바와 같이 는 부모에 따라 최소화/복원합니다.
  • 의 항목으로서(아래의 간단한 예)
  • 의 노드로서.
  • 중첩된 레이아웃.

그러나 이러한 전략이 특정 사용 사례에 적합하지 않은 경우 다음을 시도해 보십시오. 설정JFrame나머지 프리랜서 요소에 대해 또는 인스턴스가 표시되고 대화상자의 부모로서 프레임을 사용합니다.

많은 이미지

이 경우 여러 요소가 이미지인 경우 대신 다음 중 하나를 사용하는 것이 좋습니다.

  1. ★★★JLabel(스크롤 페인 중앙) 사용자가 관심 있는 이미지를 표시합니다.에 나타나듯이
  2. 1인치JList. 이 답변에서 보듯이.이 중 '단일 행' 부분은 모두 동일한 치수의 경우에만 작동합니다.또는 영상을 즉시 스케일링할 준비가 되어 있고 모두 동일한 가로 세로 비율(예: 4:3 또는 16:9)인 경우.

" " " " " "JFrameSwing 앱을 프로그래밍할 때부터 어프로치를 도입해 왔습니다.처음에는 잘 몰라서 한 게 대부분이에요.그러나 개발자로서의 경험과 지식이 성숙해지고 온라인에서 많은 경험 많은 자바 개발자들의 의견을 읽고 흡수하기 시작하면서, 나는 다중에서 벗어나려고 시도했다.JFrame(현재의 프로젝트와 장래의 프로젝트 양쪽에서) ...와 마주칠 뿐이다.이것 좀...내 고객들의 반발이거짓말이야!"자녀" 창을 제어하는 모달 대화상자를 구현하기 시작하면서JInternalFrame개별 컴포넌트에 대해 고객이 불만을 제기하기 시작했습니다!베스트 프랙티스라고 생각되는 것을 하고 있었기 때문에, 매우 놀랐습니다.하지만 '행복한 아내는 행복한 삶이다'라는 말이 있죠.고객도 마찬가지입니다.물론 저는 청부업자이기 때문에 최종 사용자는 개발자인 저에게 직접 접근할 수 있습니다.이것은 일반적인 시나리오는 아닙니다.

그럼 에는 '하다'의JFrame다른 사람들이 제시한 몇 가지 단점을 보여주는 신화뿐만 아니라 접근법도 있다.

  1. 레이아웃의 궁극적인 유연성 - 분리 가능JFrame화면에 되는 내용을할 수 있는 합니다.이 개념은 "개방적"으로 느껴집니다.은 큰 .JFrame그리고 많은JInternalFrames.
  2. 매우 모듈화된 어플리케이션에서 잘 동작합니다.제 경우 대부분의 어플리케이션에는 서로 전혀 관계가 없는 3~5개의 큰 '모듈'이 있습니다.예를 들어 한 모듈은 영업 대시보드이고 다른 모듈은 회계 대시보드일 수 있습니다.그들은 서로 말도 안 하고 아무것도 안 해요.단, 이그제큐티브는 양쪽을 모두 열고 싶을 수 있으며 태스크바에 다른 프레임이 있으면 생활이 쉬워집니다.
  3. 최종 사용자가 외부 자료를 쉽게 참조할 수 있도록 합니다.한 번은 다음과 같은 상황이 있었습니다.제 앱에는 "데이터 뷰어"가 있어서 "새로 추가"를 클릭하면 데이터 입력 화면이 열립니다.처음에는 둘 다JFrame은 s.로 싶었다.JDialog그 부모가 데이터 뷰어였던 거죠변경을 실시했습니다만, 곧바로 최종 유저로부터 전화를 받았습니다.최종 유저는, 프로그램의 다른 부분(또는 Web 사이트, 기억나지 않는 Web 사이트)을 참조하고 있는 동안, 뷰어를 최소한으로 하거나 닫거나 에디터를 열어 둘 수 있는 것에 크게 의존하고 있었습니다.멀티 모니터에 접속되어 있지 않기 때문에 데이터 뷰어를 완전히 숨긴 채 입력 대화 상자를 1번으로 하고 다른 대화 상자를 2번으로 해야 했습니다.이것은, 에서는 불가능했습니다.JDialogJInternalFrame'별거'로 바꿨어요JFrames하지만 중요한 교훈을 얻었죠
  4. 속설: 코드화하기 어렵다 - 내 경험으로는 그렇지 않다.왜 더 쉽게 만들 수 있는지 모르겠습니다.JInternalFrame 훨씬JFrame사실, 제 경험상으로는JInternalFrames이치노개폐를 체계적으로 처리하는 방법을 개발했습니다.JFrame정말 잘 작동하는 앱에 있습니다.을 거의 은, 「 」입니다.★★★★★★★★★★★★★★★★★★★★★★★,SwingWorker백그라운드 스레드 및 EDT 상의 GUI 코드 취득, 사용자가 프레임을 두 번 열려고 할 경우 프레임 전면에 복원 및 가져오기 등을 제어합니다.은 의 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★JFrame는 .open() 방식(open method)과 방식windowClosing()이벤트가 나머지를 처리합니다(프레임이 이미 열려 있습니까).기타) 이 접근방식을 템플릿으로 만들기 때문에 프레임별로 구현하기가 어렵지 않습니다.
  5. 신화/미실증: Resource Heavy - 이 추측성 진술의 배후에 있는 몇 가지 사실을 알고 싶습니다.하지만, 아마도, 당신은 말할 수 있다.JFrameJInternalFrame100을 열어도JFrame몇 개의 ?: calling " " " " " " : "dispose()이 가비지 하는 모든 는 가비지 수집에 사용됩니다).JInternalFrame을 이용하다

글을 많이 썼는데 더 쓸 수 있을 것 같아요.어쨌든, 나는 그것이 단지 인기 없는 의견이라고 해서 다운되지 않기를 바란다.그 질문은 분명히 가치 있는 질문이고, 비록 그것이 일반적인 의견이 아니더라도, 저는 가치 있는 답변을 드렸기를 바랍니다.

여러 프레임/SDI(Single Documents Per Frame)와 단일 프레임/MDI(Multiple Documents Per Frame)의 좋은 예로는 Microsoft Excel이 있습니다.MDI의 장점:

  • 직사각형이 아닌 창을 여러 개 만들 수 있으므로 데스크톱이나 다른 창을 다른 프로세스에서 숨기지 않습니다(예: 웹 브라우저).
  • 두 번째 Excel 창에 쓰는 동안 하나의 Excel 창에서 다른 프로세스에서 창을 열 수 있습니다. MDI에서 내부 창 중 하나에 쓰려고 하면 전체 Excel 창에 초점이 맞춰지고 다른 프로세스에서 창을 숨길 수 있습니다.
  • 다른 화면에 다른 문서를 표시할 수 있으며, 이는 특히 화면의 해상도가 동일하지 않을 때 유용합니다.

SDI(Single-Document Interface, 즉 모든 창에 하나의 문서만 있을 수 있습니다):

여기에 이미지 설명 입력

MDI(Multiple-Document Interface, 즉 모든 창에 여러 개의 문서가 있을 수 있음):

여기에 이미지 설명 입력

"사용자 친화적이지 않다"는 주장에 대해 방금 언급한 예를 들어 반박하고 싶습니다.

이 어플리케이션에는 메인창이 있어 사용자가 다양한 '프로그램'을 별도의 탭으로 실행할 수 있습니다.우리는 가능한 한 이 단일 창에 우리의 애플리케이션을 유지하려고 노력했습니다.

실행하는 '프로그램' 중 하나에 시스템에서 생성된 보고서 목록이 표시되며 사용자는 각 줄의 아이콘을 클릭하여 보고서 뷰어 대화 상자를 열 수 있습니다.이 뷰어는 리포트의 세로/가로 A4 페이지에 상당하는 화면을 표시하고 있기 때문에, 유저는 이 창이 매우 크고, 거의 화면을 채우는 것을 좋아합니다.

몇 달 전부터 고객으로부터 여러 보고서를 동시에 열 수 있도록 보고서 뷰어 창을 모델리스로 만들어 달라는 요청을 받기 시작했습니다.

한동안 나는 이것이 좋은 해결책이 아니라고 생각했기 때문에 이 요청을 거절했다.하지만 사용자들이 우리 시스템의 '결함'을 어떻게 극복하고 있는지 알게 되면서 마음이 바뀌었습니다.

뷰어를 열고 '다른 이름으로 저장' 기능을 사용하여 보고서를 특정 디렉토리에 PDF로 저장하고 Acrobat Reader를 사용하여 PDF 파일을 연 다음 보고서에서도 동일한 작업을 수행합니다.여러 Acrobat Reader가 원하는 다양한 보고서 출력과 함께 실행됩니다.

그래서 저는 인정해서 시청자를 모델리스로 만들었어요.즉, 각 뷰어에는 태스크바 아이콘이 있습니다.

지난주에 최신 버전이 공개되었을 때, 그들의 압도적인 반응은 사랑스럽다는 것이었다.최근에 가장 많이 개선된 시스템 중 하나입니다.

따라서 사용자가 원하는 것은 나쁘지만 궁극적으로 당신에게 도움이 되지 않는다고 사용자에게 말합니다.

주의사항:

  • 이러한 모델리스 창에는 JDialog를 사용하는 것이 가장 좋은 방법인 것 같습니다.
  • 합니다.ModalityTypemodal 이 표시됩니다이것이 이러한 대화상자에 태스크바아이콘을 클릭합니다.
  • 모형이 없는 대화상자의 경우 null 부모를 생성자에게 전달하되 '부모' 창을 기준으로 찾습니다.
  • Windows의 Java 버전6 에는 버그가 있습니다.즉, 메인창은 사용자가 알리지 않아도 '항상 맨 위에' 있을 수 있습니다.이 문제를 해결하려면 버전 7로 업그레이드하십시오.

jInternalFrame을 메인프레임으로 만들어 숨깁니다.그런 다음 이후 이벤트에 사용할 수 있습니다.

jInternalFrame.setSize(300,150);
jInternalFrame.setVisible(true);

오랜만에 스윙을 만지긴 했지만 일반적으로 이렇게 하는 것은 나쁜 습관입니다.생각나는 주요 결점은 다음과 같습니다.

  • 비용이 많이 듭니다.다이얼로그나 JInternalFrame과 같은 다른 종류의 윈도 컨테이너에 JFrame을 그리려면 훨씬 더 많은 리소스를 할당해야 합니다.

  • 사용자 친화적이지 않음:JFrame을 여러 개 겹쳐 놓은 상태로 이동하는 것은 쉽지 않습니다. 어플리케이션이 일관성이 없고 설계가 불량한 어플리케이션 세트처럼 보일 수 있습니다.

  • 사용하기 쉬운 JInternal Frame 이것은 레트로닉한 느낌입니다.지금은, 데스크탑이나 JInternal Frame 의 패턴에 대해서, 다른 유저보다 스마트한(또는 여유 시간이 많은) 유저도 이미 생각하고 있기 때문에, 사용하는 것을 추천합니다.

츠키노 중 하나는 것이 '는 사실 입니다.JFrame에 새로운 태스크바아이콘을 나타냅니다. 개의 " " " "JFrame머리를 쥐어뜯게 됩니다.

는 개인적으로 ONE을 .JFrame지원해주실 수 있습니다.여러 가지를 표시하는 방법은 여러 가지입니다. Canvases,JInternalFrame,CardLayout , 이븐 , 이븐.JPanel가능성이 있습니다.

여러 JFrame 객체 = 통증, 문제 및 문제.

개를 하는 것 요.Jframe는 좋은 생각이 아닙니다.

신,를 할 수 있습니다.JPanel 개의 "" " " " " "JPanelJFrame.

이 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아아.JPanel s에 것 의 것을 할 수 .JFrame.

「」에 JPanel 도 할 수 도 다 할 수 있어요.JPanel 할 수 JFrame한번에 하나씩.

""를 전환하려면"JPanel도를 사용하다JMenuBar with 와 함께JMenuItems for each 각각에 대해서JPanel아니면 'JBuutton'for eachJPel'JPel.

개 상 one의 more than이두?JFrame좋은 연습은 아니지만, 법 은 니 방 상 나 습 한 없것 practice is,은문원 want one not there a we if more but good될 than다니제이면하JFrame

하나 게 요.JFrame 가지 JFrames.

프레임의 사이즈가 같은 경우는, 프레임을 작성해, 그 프레임을 참조로서 건네주는 것은 어떨까요.

프레임을 통과하면 프레임을 채울 방법을 결정할 수 있습니다.숫자 집합의 평균을 계산하는 방법을 갖는 것과 같습니다.몇 번이고 몇 번이고 그 방법을 만들어 주시겠습니까?

좋은 방법은 아니지만, 사용하고 싶어도 싱글톤 패턴을 사용할 수 있습니다.나는 내 프로젝트의 대부분에서 싱글톤 패턴을 사용해 왔다.

언급URL : https://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-or-bad-practice

반응형