![](/img/trans.png)
[英]How to change Background color of a JButton from a derived class in Java Swing
[英]java swing - how to change window background
我試圖創建一個將窗口背景從默認切換為紅色的按鈕。 我沒有找到任何與默認顏色匹配的預設顏色,因此在創建它時嘗試從panel.getBackground
獲取它。 我在line 11
出現錯誤,我不知道如何檢查當前背景色。
JPanel panel = new JPanel();
panel.setBounds(0, 0, 434, 262);
frame.getContentPane().add(panel);
panel.setLayout(null);
panel.setVisible(true);
Color c=panel.getBackground();
JButton btnRed = new JButton("Red");
btnRed.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(panel.getBackground(c));{
panel.setBackground(Color.RED);
}
else{
panel.setBackground(c);
}
}
});
要比較的Color
,這是一個Object
那么equals()
的方式...也是if
期望一個boolean
,並會結束時;
找到了,所以這樣:
if(panel.getBackground(c));{
// ↑ not a boolean ↑
// ↑
// ; is wrong
一定是
if(panel.getBackground().equals(c)){
if(panel.getBackground(c));{
不正確,它甚至不會編譯。 應該是if (c.equals(panel.getBackground()) {
注意,缺少;
在聲明的末尾。
另外,沒有諸如getBackground(Color)
這樣的方法,因此,與else
語句一起,您的代碼基本上不會編譯。
不要使用null
布局,您不能控制UI的各個方面,這些方面會改變組件在不同系統上的大小或外觀設置
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private Color baseColor;
public TestPane() {
baseColor = getBackground();
setLayout(new GridBagLayout());
JButton btn = new JButton("Click");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (baseColor.equals(getBackground())) {
setBackground(Color.RED);
} else {
setBackground(baseColor);
}
}
});
add(btn);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
檢查當前顏色的一種替代方法是使用一個簡單的計數器,這可能會在某些系統/外觀上引起某些問題,...
public class TestPane extends JPanel {
private int tick;
public TestPane() {
setLayout(new GridBagLayout());
JButton btn = new JButton("Click");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tick++;
if ((tick % 2) != 0) {
setBackground(Color.RED);
} else {
setBackground(null);
}
}
});
add(btn);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
這將使您能夠獨立於當前顏色翻轉狀態,這通常會更安全
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.