Jframe上的位置

时间:2015-09-08 12:17:33

标签: java swing jframe gridbaglayout

我正在研究game但是在JLabel的位置上存在一些问题。我有这个:

http://puu.sh/k47m6/89136f7aeb.png

作为我的董事会。我想做两件事:

  1. 将“Ledu”放在蓝色板的顶部
  2. 在其下插入一个随机生成的数字,以便每次按下图像时它都会改变!
  3. 这是我的代码:

    start.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) { 
            bp.removeAll();
            bp.revalidate();
            bp.repaint();
            BufferedImage mFrame2= null;
    
            try {
                mFrame2 = ImageIO.read(new File("B2.png"));
            } 
            catch (IOException e1) {
                e1.printStackTrace();
            }
    
            bp = new BackgroundPanel(mFrame2);
            bp.setLayout(new GridBagLayout());
            GridBagConstraints c = new GridBagConstraints();
            JLabel hi1 = new JLabel ("Ledu");
            Font fs = hi1.getFont();
            hi1.setFont(fs.deriveFont(30f));
            c.ipady = 0;       //reset to default
            c.ipadx = 0;
            c.anchor = GridBagConstraints.FIRST_LINE_END; 
            c.insets = new Insets(10,0,0,0);  //top padding
            bp.add(hi1, c);
            mainf.setContentPane(bp);
        };
    });
    
    mainf.pack();
    mainf.setVisible(true); 
    

    我如何将标签放在蓝色框的顶部,我需要做些什么来生成随机数,类似于骰子卷?

1 个答案:

答案 0 :(得分:2)

  

1.将Ludo放置在蓝色板的顶部

嗯,我不知道这意味着什么。这是否意味着在蓝色区域的绝对中心。或者它是指顶部/左侧,顶部/中部,顶部/右侧?

更具描述性,因此我们不必猜测。

现在,我认为标签位于整个图像的中心。这是GridBagLayout的默认行为。如果您不希望图像位于中心,那么您需要使用weightx / weighty约束。

阅读How to Use GridBagLayout上Swing教程中的部分,了解约束如何工作的解释。

但是,我不认为这会解决您的问题,因为您无法根据"蓝色"定位组件。图像较大的区域。我建议你需要两个图像,一个用于游戏板,一个用于蓝色区域。然后,您可以开始相对在蓝色区域定位组件。

  

2.在其下插入一个随机生成的数字,以便每次按下图像时它都会改变!

按照上面的建议拆分图像后,您可以在第二张图像上使用垂直BoxLayout。然后,您可以显示两个标签,一个带有文本,另一个带有数字。