我试图制作一个按钮,将窗口背景从默认切换为红色。
我还没有找到任何预设颜色来匹配默认颜色,所以当我创建它时,我试图从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);
}
}
});
答案 0 :(得分:2)
您想要比较Color
,这是Object
因此equals()
就是这样......也是if
期望boolean
并且会{找到;
后完成,所以:
if(panel.getBackground(c));{
// ↑ not a boolean ↑
// ↑
// ; is wrong
必须是
if(panel.getBackground().equals(c)){
答案 1 :(得分:2)
subprocess.Popen(['py3','setup.py'], cwd='path-of-my-setup')
不正确,甚至不会编译。它应该是if(panel.getBackground(c));{
请注意,声明末尾缺少if (c.equals(panel.getBackground()) {
。
此外,没有;
这样的方法,因此,与getBackground(Color)
语句一起,您的代码基本上不会编译。
不要使用else
布局,您不能控制UI的各个方面,这些方面将改变不同系统上所需组件的大小或外观设置
null
检查当前颜色的替代方法,可能会导致某些系统/外观上的某些问题,使用简单的计数器......
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);
}
}
}
这将允许您独立于当前通常更安全的颜色翻转状态