【问题标题】:Jframe paint class to red isn't working红色的 Jframe 油漆类不起作用
【发布时间】: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());

    }
}

【问题讨论】:

  • 不要覆盖paintJFrame,原因很多,但在你的情况下,它不会达到你想要的结果。 JFrame 本身就是许多组件的容器,有关更多详细信息,请参阅 How to use Root Panes。更好的解决方案是更改 simplePanel 的背景颜色
  • 是的,但它覆盖了我的 awt.Window
  • 是的,但是什么?你的方法是错误的 - 在simplePanel 上调用setBackground 并更改它的背景颜色,问题解决了
  • 如果有人想看,感谢修复和发布的答案

标签: java events background jframe paint


【解决方案1】:

好的,我找到了:

public ConversionsFrame(){

        setTitle("Fenêtre de conversion");
        setSize(600,300);    
        setResizable(true);
        setLocationRelativeTo(null);
        simplePanel.setBackground (java.awt.Color.RED) ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多