Apabila mengubah rupa dan rasa aplikasi Java Swing menggunakan menu, perubahan mungkin tidak ditunjukkan dalam yang baru ditambah JTabbedPane. Walaupun menggunakan SwingUtilities.updateComponentTreeUI(), isu ini berterusan.
Penyelesaian melibatkan pengemaskinian UI keseluruhan bingkai, termasuk mana-mana JTabPanes di dalamnya:
Window windows[] = Frame.getWindows(); for(Window window : windows) { SwingUtilities.updateComponentTreeUI(window); }
Dengan memperluaskan konsep ini, a pelaksanaan yang lebih mantap dapat dicapai. Berikut ialah contoh yang mengemas kini rupa dan rasa aplikasi Swing secara dinamik, termasuk mana-mana JTabPanes:
public class JTabbedText { // ... (code omitted for brevity) private static JToolBar createToolBar(final Component parent) { // ... (code omitted for brevity) combo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { int index = combo.getSelectedIndex(); try { UIManager.setLookAndFeel( available[index].getClassName()); // Update the UI of all windows Window[] windows = Window.getWindows(); for (Window window : windows) { SwingUtilities.updateComponentTreeUI(window); } } catch (Exception e) { e.printStackTrace(System.err); } } }); // ... (code omitted for brevity) } // ... (code omitted for brevity) }
Pendekatan ini memastikan perubahan pada rupa dan rasa akan disebarkan ke semua bahagian aplikasi, termasuk JTabPanes, memberikan pengalaman pengguna yang konsisten.
Atas ialah kandungan terperinci Mengapa JTabbedPane Swing Saya Tidak Mengemas kini Rupa dan Rasanya Selepas Menukar UIManager?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!