0

我写了一个小程序,将在 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) {
               } 
     }
4

3 回答 3

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;
}
于 2012-04-26T18:17:38.470 回答
1

这段代码有一些问题。

  1. 您循环遍历数组for (int j = 0; j < selectedIndices.length; j++),但从不使用数组中的条目selectedIndices[j]。相反,您只需使用j.
  2. 现在你已经硬编码了当j==0你将使用MotifLookAndFeel. 通常您会使用 selectedIndex 从列表中检索数据(=外观的标识符),并使用该标识符来更改外观
  3. 只用try{} catch( Exception e ){}. 例如,您捕获所有Exceptions、已检查异常和运行时异常。此外,除了例外,您不做任何事情。至少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(); 
}
于 2012-04-26T18:22:45.747 回答
0

Java How To Program 一书有一个类似的程序示例。链接1 ,链接2

于 2012-04-26T18:17:31.003 回答