有沒有辦法清除 JFrame 的背景顏色或至少將其改回默認顏色?
uj5u.com熱心網友回復:
更新:感謝您的回答,但看起來我在閱讀評論后不小心得到了我正在尋找的答案。我只是在建構式中執行了frame.getContentPane().setBackground(null),我希望背景發生變化,這確實將背景恢復為默認顏色。在閱讀評論之前我從未想過要這樣做,所以沒有你的幫助我不可能做到。再次,謝謝。
uj5u.com熱心網友回復:
Swing 在內部使用了一個叫做 ColorUIResource 的概念,通常是指框架定義和使用的顏色。
我學到的一個重要想法是,如果顏色不是 ColorUIResource 的特定實體,則 Swing 不會更改組件的顏色。
如果你想恢復你的 JFrame 的顏色,你可以做類似的事情
frame.setBackground(new ColorUIResource(Color.white));
并恢復組件的原始顏色,您可以通過一次呼叫
SwingUtilities.updateComponentTreeUI(window)
uj5u.com熱心網友回復:
JFrame是頂級容器,因此我認為您指的是其內容窗格的背景顏色,默認情況下,它是JPanel.
默認背景顏色取決于外觀,可以通過 class 獲得javax.swing.UIManager。
這是一個非常基本的應用程式演示。我明確地將內容窗格背景設定為黃色,單擊按鈕后,背景將恢復為其默認值。
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.plaf.ColorUIResource;
public class FrameTst {
private static ColorUIResource bg;
private JFrame frame;
private void createAndDisplayGui() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = (JPanel) frame.getContentPane();
contentPane.setBackground(Color.yellow);
contentPane.setBorder(BorderFactory.createLineBorder(Color.red, 2));
contentPane.setLayout(new FlowLayout(FlowLayout.LEADING));
JButton button = new JButton("Button");
button.addActionListener(event -> contentPane.setBackground(bg));
contentPane.add(button);
frame.setSize(450, 350);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
bg = (ColorUIResource) UIManager.get("Panel.background");
EventQueue.invokeLater(() -> new FrameTst().createAndDisplayGui());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393615.html
