1
ボタンをクリックした後にactionPerfomedでjavaのルックアンドフィールを使用すると、エフェクトの変更が正しく機能しない場合があります。Javaのルックアンドフィールとメイン
しかし、同じコードをmainに置くと正しく動作します。
この解決策は何ですか?
ボタンをクリックした後にactionPerfomedでjavaのルックアンドフィールを使用すると、エフェクトの変更が正しく機能しない場合があります。Javaのルックアンドフィールとメイン
しかし、同じコードをmainに置くと正しく動作します。
この解決策は何ですか?
guiをレイアウトする前にルック・アンド・フィールを変更すると、すべてのGUIコンポーネントが自分自身を描画する方法を知っています。
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
が、これについてjava documentationを参照してください:あなたは後の段階でそれを変更する場合は、変更は、すべてのコンポーネントに伝搬させるためのUIツリーを更新する必要があります。
これは、ボタンを押したときの外観を変更し、感じの簡単な例です:
public static void main(String[] args) {
final JFrame frame = new JFrame("Test");
frame.add(new JButton(new AbstractAction("Press to change") {
int current = 0;
@Override
public void actionPerformed(ActionEvent e) {
LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
LookAndFeelInfo laf = lafs[current++ % lafs.length];
try {
UIManager.setLookAndFeel(laf.getClassName());
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
したくない場合はpack
frame
(それのサイズを変更する)だけではなく、repaint
を呼び出すこと。
ルック・アンド・フィールの変更(どのように変更するのですか?)は[新しく作成されたJFrames]に影響します(http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JFrame)。 .html#setDefaultLookAndFeelDecorated(boolean)) – khachik