Java: трудности с Swing - PullRequest
       8

Java: трудности с Swing

1 голос
/ 26 октября 2010

Я пытаюсь изменить графический интерфейс.Он содержит GLCanvas, отображающий содержимое JOGL.

Вот код для его настройки:

private void setupWindow() {
    this.frame = new JFrame(WINDOW_TITLE);
    frame.setSize(width, height);
    frame.setVisible(true);

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    menuBar.add(menu);
    JMenuItem exitItem = new JMenuItem("Exit");
    exitItem.addActionListener(listener);
    menu.add(exitItem);
    frame.setJMenuBar(menuBar);
}

В настоящее время холст занимает все пространство в окне, кроме менюбар.Я хотел бы освободить место для других элементов управления в окне, таких как кнопки и списки.Как я могу это сделать?

Я попытался вставить следующее, но это не сработало:

private void setupWindow() {
    this.frame = new JFrame(WINDOW_TITLE);
    frame.setSize(width, height);

    // ** inserted the following:
    JPanel canvasPanel = new JPanel(new BorderLayout());
    canvasPanel.add(canvas);
    canvasPanel.setSize(30, 40);
    canvasPanel.setVisible(true);
    // **

    frame.add(canvasPanel);
    frame.setVisible(true);

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

    JMenuBar menuBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    menuBar.add(menu);
    JMenuItem exitItem = new JMenuItem("Exit");
    exitItem.addActionListener(listener);
    menu.add(exitItem);
    frame.setJMenuBar(menuBar);
}

Это совсем не изменяет внешний вид окна.

Что мне здесь делать?Я не слишком знаком с Java GUI.

Обновление : изменение аргумента конструктора с BorderLayout на FlowLayout приводит к исчезновению GLCanvas.

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Согласно ответу Анона, вам действительно нужно лучше понимать менеджеров по расположению.Ваш вопрос слишком открыт.

В случае, если это поможет, хотя:

    JPanel canvasPanel = new JPanel(new BorderLayout());
    frame.add(canvasPanel, BorderLayout.CENTER);

    canvasPanel.add(canvas);


    Box leftBtnsBox = Box.createVerticalBox();
    frame.add(leftBtns, BorderLayout.WEST);

    leftBtns.add(new JButton("Button 1"));
    leftBtns.add(new JButton("Button 2"));

Этот код явно устанавливает BordeLayout, но я думаю, что менеджером по умолчанию для панелей (и панелей содержимого) является BorderLayout.Этот код поместит две кнопки в верхнем левом углу панели холста, расположенной вертикально.Поскольку вы используете эти менеджеры компоновки, setSize вашего второго примера кода не имеет никакого эффекта.

0 голосов
/ 26 октября 2010

Я предлагаю проверить это руководство для менеджеров макетов - оно даст вам достаточно информации, чтобы увидеть, что вы должны попробовать.

...