我正在编写一个类来创建一个可以与一些文本一起显示的分数对象。我有一个黑色背景面板和两个垂直方向垂直的白色面板,它们之间有一个3像素的间隔。每个白色面板都包含一个JLabel。
这会创建分子,分母和分数栏。当分子和分母长度相同时(例如1/2),一切正常。但是一旦分子和分母的大小不同(例如1/12),那么其中一个面板太小而且沿着两侧变黑。我试图强制小面板占据背景面板的整个宽度,但似乎无法使其正常工作。这是我的班级。
public class MakeFraction2 {
private JLabel jlabelNum;
private JLabel jlabelDen;
JPanel mainpanel = new JPanel();
JPanel numpanel = new JPanel();
JPanel denpanel = new JPanel();
private Font font3 = new Font("Monospaced", Font.BOLD, 17);
private Font font4 = new Font ("SansSerif", Font.BOLD, 17);
MakeFraction2(){
jlabelNum = new JLabel("Num");
jlabelDen = new JLabel("Den");
mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.Y_AXIS));
numpanel.setLayout(new BoxLayout(numpanel, BoxLayout.X_AXIS));
denpanel.setLayout(new BoxLayout(denpanel, BoxLayout.X_AXIS));
mainpanel.setBackground(Color.BLACK);
numpanel.setBackground(Color.WHITE);
denpanel.setBackground(Color.WHITE);
numpanel.add(jlabelNum);
denpanel.add(jlabelDen);
mainpanel.add(numpanel);
mainpanel.add(Box.createRigidArea(new Dimension(1,2)));
mainpanel.add(denpanel);
}
public void setnumden(String num, String den) {
mainpanel.setBackground(Color.BLACK);
jlabelNum.setText(num);
jlabelDen.setText(den);
sizepanels();
}
void sizepanels(){
int width = mainpanel.getWidth();
int h1 = numpanel.getHeight();
int h2 = denpanel.getHeight();
int height = Math.max(h1, h2);
numpanel.setSize(width,height);
denpanel.setSize(width,height);
}
}
答案 0 :(得分:2)
我建议使用GridLayout(2行1列)并将标签放在那里。
另请参阅JEditorPane http://java-sl.com/fraction_view.html
中的分数示例