我写了一个小程序,它将在多个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) {
}
}
答案 0 :(得分:3)
如果只选择了一个项目(我认为是这种情况),您的代码将始终选择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)
此代码存在一些问题。
for (int j = 0; j < selectedIndices.length; j++)
但您从不使用数组selectedIndices[j]
中的条目。相反,您只需使用j
。j==0
时您会使用MotifLookAndFeel
。通常,您将使用selectedIndex从列表中检索数据(=外观的标识符),并使用该标识符来更改外观try{} catch( Exception e ){}
包围您的代码是非常糟糕的做法。例如,您捕获所有Exception
,已检查的异常和运行时异常。此外,您不会对例外做任何事情。至少在e.printStackTrace()
块中调用catch
,以便您确实知道出现了问题为了让你前进,我会更喜欢编写代码(非编译伪代码来说明我上面提到的问题)
//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)