我目前正在尝试为我正在制作的游戏创建一个图形用户界面,但我开始遇到一些麻烦。由于某种原因,我无法将主板的计时器背景更改为蓝色,将 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();
}
}
最佳答案
确保将 layeredPane
和 timer
设置为 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/