java 在JFrame中使用JButton改变背景颜色

yhived7q  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(130)

我正试图学习在Java中使用Jframes,我想从简单的开始。我想做一个JFrame,里面的按钮有不同的用法。一个按钮应该改变背景颜色的框架,但它什么也不做(我离开了进口,但我有他们在我的代码)

public class Main{
    static MyFrame frame = new MyFrame("Test");;
    public static void main(String[] args) { 
        MyButton change = new MyButton("Change Color", "changeColor");
        MyButton exit = new MyButton("Exit", "exit");

        frame.setSize(500, 250);
        frame.setVisible(true);

        frame.add(change);
        frame.add(exit);
    }
}
public class MyFrame extends JFrame{
    MyFrame(String title){
        super(title);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
public class MyButton extends JButton implements ActionListener{
    String use;
    
    MyButton(String title, String use){
        super(title);
        this.use = use;
        addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(use.equals("exit")){
            System.exit(0);
        }else if(use.equals("changeColor")){
            Main.frame.setBackground(Color.blue);
            repaint();
        }
    }
}
luaexgnf

luaexgnf1#

  • 不要扩展JFrame
  • 扩展JPanel并使用它来容纳组件等。
  • 另外请注意,您不需要将所有类都设为公共类。只需要包含static main入口点的一个。对于像这样的小程序,只需在主公共类之后添加没有任何访问级别修饰符(public,private等)的类。它可以使调试和修改更容易。缺点是对于大型程序,您将不必要地编译所有内容。在这种情况下,请使用单独的类文件。

下面是一个使用map保存Color名称和Color对象的示例,用于创建JButton及其actionListener。

import java.awt.Color;
import java.awt.Dimension;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ChangeColor extends JPanel {
    JFrame frame = new JFrame();
    Map<String, Color> colors = Map.of("RED", Color.RED, "BLUE", Color.BLUE,
            "MAGENTA", Color.MAGENTA);

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new ChangeColor().start());
    }

    public void start() {
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(this);
        frame.pack();
        frame.setLocationRelativeTo(null); // center on screen
        for (Entry<String, Color> e : colors.entrySet()) {
            add(createButton(e));  // add button to JPanel
        }
        frame.setVisible(true);

    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(500, 500);
    }

    public JButton createButton(Entry<String, Color> entry) {
        JButton b = new JButton(entry.getKey()); // set button name
        b.addActionListener((ae) -> {
            setBackground(entry.getValue());  // set the background color
            repaint();
        });
        return b;
    }

}

相关问题