2012-04-26 3 views
0

작은 숫자로 바꾸는 프로그램을 작성하십시오. & F 목록에서 L & F를 선택하면 버튼이 다르게 보입니다. 나는 자바 :자바에서 목록의 Look and Feel 목록

이 내 코드

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 

int selectedIndices[] = jList1.getSelectedIndices(); 
try { 
for (int j = 0; j < selectedIndices.length; j++){ 
if(j == 0){ 
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 
    SwingUtilities.updateComponentTreeUI(this); 
      this.pack(); 
} 
if(j == 1){ 
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
SwingUtilities.updateComponentTreeUI(this); 
       this.pack(); 
} 
if(j == 2){ 
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
SwingUtilities.updateComponentTreeUI(this); 
      // this.pack(); 
} 
if(j == 3){ 
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
    SwingUtilities.updateComponentTreeUI(this); 
      this.pack(); 
} 
} 
} 
catch (Exception e) { 
       } 
    } 
+0

혹시 1 개 선택된 인덱스보다 더 있나요 (위에서 언급 한 내 문제를 설명하기 위해 비 컴파일 의사 코드) 더 좋아하는 코드를 작성하는 것, 가야? 인덱스 변수 인 j를 사용하는 것이 정확하지 않은 것 같습니다 ... – ControlAltDel

답변

0

프로그래밍하는 방법이 책 Java는 유사한 프로그램의 예를 가지고와 초보자를 생각하면 두 번째 기회

는 있지만 변경할 수 없습니다. Link1, Link2

3

하나의 항목 만이 (내가이의 경우 가정)을 선택하면, 당신의 코드는 항상 선택 MotifLookAndFeel :

  • selectedIndices.length 1 그러므로
  • j는 당신의 루프에서, 0으로 값을 취합니다.
  • MotifLookAndFeel이 선택됩니다.

당신은 아마이 대신 같은 것을하고 싶지 :이 코드 몇 가지 문제가 있습니다

switch (jList1.getSelectedIndex()) { 
    case 0: 
     //select 1st L&F 
     return; 
    case 1: 
     //select 2nd L&F 
     return; 
    case 2: 
     //select 3rd L&F 
     return; 
} 
+0

감사합니다. – imalak

1

.

  1. for (int j = 0; j < selectedIndices.length; j++) 배열을 반복하지만 배열 selectedIndices[j]의 항목은 절대로 사용하지 마십시오. 대신 j을 사용하면됩니다.
  2. 이제 j==0MotifLookAndFeel으로 사용하면 하드 코드 된 것입니다. 일반적으로 selectedIndex를 사용하여 목록에서 데이터를 검색하고 그 식별자를 사용하여 모양과 느낌을 변경합니다.
  3. 코드를 try{} catch(Exception e){}으로 묶는 것은 매우 나쁜 습관입니다. 예를 들어 확인 된 예외 및 런타임 예외를 모두 Exception 개 잡습니다. 게다가, 당신은 예외를 가지고 아무것도하지 않습니다. 적어도 e.printStackTrace() 전화를 catch 블록에 넣으십시오. 따라서 실제로 무언가가 잘못되었음을 실제로 알고 계실 것입니다.
  4. 개인적인 경험으로는 룩앤필에서 표준 룩앤필 (금속)에서 시스템 고유 보고 느끼다. 그러나 Metal - OS specific - Nimbus - Metal - ....에서 전환하면 이상한 결과가 발생합니다.

그냥 내가

//where the list is created 
//only allow single selection since I cannot set multiple L&F at the same time  
jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

//button handling 
int selectedIndex = jList1.getSelectedIndex(); 
if (selectedIndex == -1) { return; } //no selection 
MyLookAndFeelIdentifier identifier = jList1.getModel().getElementAt(selectedIndex); 
try{ 
    UIManager.setLookAndFeel(identifier.getLookAndFeel()); 
} catch (UnsupportedLookAndFeelException e){  
    e.printStackTrace(); 
} 
+0

* "OS 특정 - Nimbus - 금속 - .... 이상한 결과를 초래합니다."* Nimbus는 이상한 GUI 인공물을 도입 한 것으로 악명이 높습니다. . : –

+0

@AndrewThompson 나는 또한 다른 L & F (Motif, Kunstoff, ...)와도 만난다. 금속에서 그것들 중 하나 또는 그 뒤로 전환하는 것은 문제가되지 않지만, 비금속에서 다른 비금속으로 전환하는 것은 거의 항상 나는 JDK1.6이 이것을 향상 시켰다는 인상을 받았다. (1.4와 1.5는 단순히 재앙이었다.) 그러나 여전히 완벽하지는 않다. – Robin