Свинг показывает белое поле, когда я пытаюсь добавить более одного компонента на кадр - PullRequest
0 голосов
/ 09 декабря 2018

Я разрабатываю Java-приложение для свинга.Я пытаюсь добавить 2 JPanels на мой основной JFrame.

Мой основной класс JPanel:

public class DrawingPanel extends JPanel {
    //mouse variables here
    //Point mPt = new Point(0,0);

    public DrawingPanel() {
        setBackground(COLOURBACK);
        MyMouseListener ml = new MyMouseListener();
        addMouseListener(ml);
    }

    public Dimension getPreferredSize() {
    return new Dimension(width, height);
    }
....
....
....
}

работает нормально, когда я добавляю в качестве единственного компонента в основном кадре.Но когда я пытаюсь добавить еще одну JPanel на рамку, моя DrawingPanel появляется в виде маленького белого прямоугольника.

private void createAndShowGUI()
    {
        DrawingPanel panel = new DrawingPanel();


        JFrame frame = new JFrame("Hex Testing 4");
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        Container content = frame.getContentPane();
        JPanel aggregationFrame = new JPanel(new GridBagLayout());
        aggregationFrame.add(panel);
        aggregationFrame.add(new JLabel("Enter username:"));
        content.add(aggregationFrame);
        //this.add(panel);  -- cannot be done in a static context
        //for hexes in the FLAT orientation, the height of a 10x10 grid is 1.1764 * the width. (from h / (s+t))
        frame.setSize( (int)(SCRSIZE/1.23), SCRSIZE);
        frame.setResizable(false);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }

Это выглядит так

result

Я пытался добавить метод getPreferredSize () в DrawingPanel, как было предложено в JPanel отображается в виде небольшого белого квадрата вопроса, но он не сработал.

Можете ли вы помочь мне с этой проблемой, пожалуйста?

ОБНОВЛЕНИЕ:

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

update

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Проблема была с размером моих компонентов.Кажется, что он не вписывался в основную раму и был разрезан.Я установил динамический размер кадра, и теперь он работает хорошо.

0 голосов
/ 10 декабря 2018

Итак, я взял ваш неконтекстный код, собрал воедино работающий вариант и ... не имел проблем.Это говорит о том, что проблема в коде, который вы нам не показываете.Вместо того, чтобы публиковать «фрагменты» неполного кода, что вызывает больше вопросов, опубликуйте пример Minimal, Complete и Verifiable , который можно скомпилировать и запустить и который демонстрирует проблему, с которой вы сталкиваетесь

Пример, который работает и работает ...

import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

  public static void main(String[] args) {
    new Test();
  }

  public Test() {
    EventQueue.invokeLater(new Runnable() {
      @Override
      public void run() {
        DrawingPanel panel = new DrawingPanel();

        JFrame frame = new JFrame("Hex Testing 4");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container content = frame.getContentPane();
        JPanel aggregationFrame = new JPanel(new GridBagLayout());
        aggregationFrame.add(panel);
        aggregationFrame.add(new JLabel("Enter username:"));
        content.add(aggregationFrame);
        //this.add(panel);  -- cannot be done in a static context
        //for hexes in the FLAT orientation, the height of a 10x10 grid is 1.1764 * the width. (from h / (s+t))
        frame.pack();
        //frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      }
    });
  }

  public class DrawingPanel extends JPanel {
    //mouse variables here
    //Point mPt = new Point(0,0);

    private int width = 200;
    private int height = 200;

    public DrawingPanel() {
      setBackground(Color.BLACK);
//    MyMouseListener ml = new MyMouseListener();
//    addMouseListener(ml);
    }

    public Dimension getPreferredSize() {
      return new Dimension(width, height);
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...