【发布时间】:2017-10-16 22:24:01
【问题描述】:
您好,我尝试按照老师的要求以不同的颜色显示我的 Jframe,但它只弹出红色,然后又恢复正常的基本灰色,我不明白为什么这里是代码:
(PS 如果你也可以给我替代方案,我需要添加一个帮助按钮和另一个 JCombobox 来将我的东西转换为另一个选定的东西,但它不起作用谢谢)
package conversions;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Iterator;
import java.util.Scanner;
class ConversionsFrame extends JFrame implements ActionListener {
JLabel label1,label2;
JTextField text2 = new JTextField();
JTextField text1 = new JTextField();
JComboBox combo1 = new JComboBox();
JComboBox combo2 = new JComboBox();
JPanel simplePanel =new JPanel();
@Override
public void paint(Graphics g) {
g.setColor(Color.red);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
public ConversionsFrame(){
setTitle("Fenêtre de conversion");
setSize(600,300);
setResizable(true);
setLocationRelativeTo(null);
combo1.addItem("Distances");
combo1.addItem("Volumes");
combo1.addItem("Masses");
simplePanel.add(combo1);
combo2.insertItemAt("Mètres",0);
combo2.insertItemAt("Décimètres",1);
combo2.insertItemAt("Centimètres",2);
combo2.insertItemAt("Milimètres",3);
simplePanel.add(combo2);
label1=new JLabel("Unités");
simplePanel.add(label1);
text1=new JTextField(10);
simplePanel.add(text1);
label2=new JLabel ("Résultat");
simplePanel.add(label2);
text2=new JTextField(10);
simplePanel.add(text2);
add(simplePanel);
combo1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
switch ((String)combo1.getSelectedItem()){
case("Distances"):
combo2.removeAllItems();
combo2.insertItemAt("Mètres",0);
combo2.insertItemAt("Décimètres",1);
combo2.insertItemAt("Centimètres",2);
combo2.insertItemAt("Milimètres",3);
break;
case("Volumes"):
combo2.removeAllItems();
combo2.insertItemAt("Litres",0);
combo2.insertItemAt("Décilitres",1);
combo2.insertItemAt("Centilitres",2);
combo2.insertItemAt("Mililitres",3);
break;
case("Masses"):
combo2.removeAllItems();
combo2.insertItemAt("Grammes",0);
combo2.insertItemAt("Décigrammes",1);
combo2.insertItemAt("Centigrammes",2);
combo2.insertItemAt("Miligrammes",3);
break;
}
simplePanel.add(combo2);
// getContentPane().add(simplePanel);
}
});
}
public void actionPerformed(ActionEvent event){
System.out.println("Option choisie: "+combo1.getSelectedItem());
}
}
【问题讨论】:
-
不要覆盖
paint的JFrame,原因很多,但在你的情况下,它不会达到你想要的结果。JFrame本身就是许多组件的容器,有关更多详细信息,请参阅 How to use Root Panes。更好的解决方案是更改simplePanel的背景颜色 -
是的,但它覆盖了我的 awt.Window
-
是的,但是什么?你的方法是错误的 - 在
simplePanel上调用setBackground并更改它的背景颜色,问题解决了 -
如果有人想看,感谢修复和发布的答案
标签: java events background jframe paint