在Java中的列表中的外观和感觉

时间:2012-04-26 18:08:36

标签: java swing look-and-feel

我写了一个小程序,它将在多个L& F之间切换 只需从列表中选择L& F,按钮就会有所不同。

但第二次机会时没有改变

我是java的初学者:)

这是我的代码

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) {
               } 
     }

3 个答案:

答案 0 :(得分:3)

如果只选择了一个项目(我认为是这种情况),您的代码将始终选择MotifLookAndFeel:

  • selectedIndices.length是1
  • 因此j,在你的for循环中,只会将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;
}

答案 1 :(得分:1)

此代码存在一些问题。

  1. 循环遍历数组for (int j = 0; j < selectedIndices.length; j++)但您从不使用数组selectedIndices[j]中的条目。相反,您只需使用j
  2. 现在您已经硬编码,j==0时您会使用MotifLookAndFeel。通常,您将使用selectedIndex从列表中检索数据(=外观的标识符),并使用该标识符来更改外观
  3. 使用try{} catch( Exception e ){}包围您的代码是非常糟糕的做法。例如,您捕获所有Exception,已检查的异常和运行时异常。此外,您不会对例外做任何事情。至少在e.printStackTrace()块中调用catch,以便您确实知道出现了问题
  4. 根据我的个人经验,从外观和感觉切换到标准的外观(金属)到系统特定的外观。但是从Metal - OS特定 - Nimbus - Metal - ....切换会产生奇怪的结果。
  5. 为了让你前进,我会更喜欢编写代码(非编译伪代码来说明我上面提到的问题)

    //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(); 
    }
    

答案 2 :(得分:0)

Java How To Program一书有类似的程序示例。 Link1Link2