java - 在 swing 问题中编写 GUI

标签 java swing background opacity jlayeredpane

我目前正在尝试为我正在制作的游戏创建一个图形用户界面,但我开始遇到一些麻烦。由于某种原因,我无法将主板的计时器背景更改为蓝色,将 gameGUI 的背景更改为绿色。这是我第一次在 swing 中编程,所以我对这一切都是陌生的。

我也想知道我是否以正确的方式使用分层 Pane 。董事会需要能够成为一个分层的 Pane ,这样我就可以一直把图像放在上面。计时器将是一个顶部有太阳的天空,云也会在某个时候从它的顶部经过。

如果你能给我提示并一路帮助我,那会很棒,即使你只是在这里和那里纠正一些小问题。

谢谢。

public class gameGUI extends JPanel{

    private ArrayList<BufferedImage> nativeOne = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> nativeTwo = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> nativeThree = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> exoticOne = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> exoticTwo = new ArrayList<BufferedImage>();
    private ArrayList<BufferedImage> exoticThree = new ArrayList<BufferedImage>();

    private static int screenWidth = 680;
    private static int screenHeight = 680;

    private JLayeredPane layeredPane;

    public gameGUI(){        
        layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize(new Dimension(680, 680));
        layeredPane.setBackground(Color.GREEN);
        layeredPane.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));        
    }

    private static JLayeredPane timer(){
        JLayeredPane timer = new JLayeredPane();
        timer.setPreferredSize(new Dimension(800,120));
        timer.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
        timer.setBackground(Color.BLUE);
        return timer;
    }

    private static JPanel sideBar(){
        //Create the side bar and add buttons
        JPanel returnMofo = new JPanel();
        JButton nativeOne = new JButton(native1);
        JButton nativeTwo = new JButton(native2);
        JButton nativeThree = new JButton(native3);
        JButton exoticOne = new JButton(exotic1);
        JButton exoticTwo = new JButton(exotic2);
        JButton exoticThree = new JButton(exotic3);
        returnMofo.setLayout(new GridLayout(6,1));
        returnMofo.setPreferredSize(new Dimension(120, 680));
        returnMofo.setBorder(BorderFactory.createLineBorder (Color.BLACK, 2));
        returnMofo.add(nativeOne);
        returnMofo.add(nativeTwo);
        returnMofo.add(nativeThree);
        returnMofo.add(exoticOne);
        returnMofo.add(exoticTwo);
        returnMofo.add(exoticThree);
        return returnMofo;
    }


    private static void createAndShowGUI(){
        JFrame frame = new JFrame();
        frame.setTitle("Storm Watch");
        frame.setSize(800, 800);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameGUI gui = new gameGUI();
        frame.add(timer(), BorderLayout.NORTH);
        frame.add(sideBar(), BorderLayout.WEST);
        frame.add(gui, BorderLayout.EAST);                        

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args){    
        createAndShowGUI();    
    }                
}

最佳答案

确保将 layeredPanetimer 设置为 opaque

例如……

layeredPane.setOpaque(true);

您可能还想将 layeredPane 添加到主板...

public TestGameBoard() {
    layeredPane = new JLayeredPane();
    layeredPane.setPreferredSize(new Dimension(680, 680));
    layeredPane.setBackground(Color.GREEN);
    layeredPane.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
    layeredPane.setOpaque(true);

    setLayout(new BorderLayout()); // Easy to use layout manager
    add(layeredPane); // Now I'm visible ;)
}

当我引起您的注意时,您应该始终在事件调度线程的上下文中创建/操作 UI...

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            createAndShowGUI();
        }
    });

}

关于java - 在 swing 问题中编写 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297707/

相关文章:

Java 流 : find an element with a min/max value of an attribute

java - 添加 JScrollPane 以避免组件变形

css - 两个 body 背景图像在 IE8 中消失

html - 使用样式表时不在 html 上调用背景图像

opencv - 使用opencv提取图像的透明背景

java - 我正在制作一个24小时时钟

java - 带有 Retrofit 的 POST/PUT 参数的默认/常量值

java - Flink RabbitMQ 关联 ID

java - 一次声明多个 swing 元素

java - 在 Java 中使用 JProgressBar