相对尺寸不起作用

时间:2013-04-02 08:12:23

标签: java swing user-interface sizing

我一直在努力制作一个尺寸相对于窗户大小的JLabel但由于某种原因,这个JLabel没有出现在屏幕上。

这是我的MainGUI类中使用的代码,它包含基本接口:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MainGUI extends JFrame{

    JPanel core;
    GridBagConstraints c;

    JLabel[] sts;

    public MainGUI(){

       core = new JPanel(new GridBagLayout()); 
       getContentPane().add(core, BorderLayout.CENTER);
       setDefaultCloseOperation(EXIT_ON_CLOSE);
       setSize(500, 500); 


       sts = new JLabel[10];

       int width = (int)(66/100) * getWidth(), height = (int)(75/100) * getHeight();       //problem: due to these sizes the JLabel is not appearing

       for(int i = 0; i < sts.length; i++){ 
          sts[i] = new JLabel("test");
          sts[i].setOpaque(true);
          sts[i].setBackground(Color.BLACK);
          sts[i].setForeground(Color.BLACK);
          sts[i].setPreferredSize(new Dimension(width,height)); //size being set
       }


       c = new GridBagConstraints();

       c.gridx = 0;
       c.gridy = 0;

       core.add(sts[1], c);

    }

}

非常感谢任何寻求解决方案的帮助,非常感谢。

2 个答案:

答案 0 :(得分:2)

几个问题 -

  1. 标签
  2. 的前景色和背景色相同
  3. 您需要在标签上设置一些文字
  4. 检查是否正确计算了首选大小,因为如果该行已注释掉,则会显示标签。计算出的高度和宽度为零。
  5. 由于除法的结果是int -

    ,因此总是返回零
    int width = (int)(66/100) * getWidth();
    

    成功 -

        int width = (int)(((float)66/100) * getWidth());
    

答案 1 :(得分:0)

试试RelativeLayout库。这里有一个教程at Wiki