Java: управление шириной встроенных панелей по мере их изменения с помощью Swing - PullRequest
1 голос
/ 07 декабря 2011

Я пишу класс для создания объекта дроби, который я могу отображать вместе с текстом.У меня есть черная фоновая панель и две белые панели сверху, ориентированные вертикально с 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);
    }
}

1 Ответ

2 голосов
/ 07 декабря 2011

Я бы предложил использовать GridLayout (2 строки 1 столбец) и разместить там метки.

Также см. Пример дроби в JEditorPane http://java -sl.com / фракция_view.html

...