Java:随着Swing的变化控制嵌入式面板的宽度

Java:随着Swing的变化控制嵌入式面板的宽度,java,swing,jpanel,jlabel,Java,Swing,Jpanel,Jlabel,我正在编写一个类来创建一个分数对象,它可以与一些文本一起显示。我有一个黑色的背景面板和两个白色面板,它们之间有一个3像素的间隔。每个白色面板包含一个JLabel 这将创建分子、分母和分数条。当分子和分母的长度相同(例如1/2)时,一切正常。但一旦分子和分母的大小不同(例如1/12),则其中一块面板太小,两侧变黑。我试图强迫小面板占据背景面板的全部宽度,但似乎无法正常工作。这是我的班级 public class MakeFraction2 { private JLabel jlabelN

我正在编写一个类来创建一个分数对象,它可以与一些文本一起显示。我有一个黑色的背景面板和两个白色面板,它们之间有一个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);
    }
}

我建议使用GridLayout(2行1列)并将标签放在那里


另请参见JEditorPane中的分数示例

发布一个小的可编译问题示例,以便我们更好地了解问题。另请参见此。