2010-11-29 3 views
1

Мой код:JPanel не будет изменять размеры

public MyConstructor() { 
    view = new JPanel(new GridLayout(3, 1)); 
    header = new JPanel(new GridLayout(2, 1));//2 ROWS 1 COLUMN 
    foot = new JLabel("Copyright..."); 
    content = new JPanel(); 
    info = new JLabel(""); 
    logo = new JLabel() { 

     BufferedImage img; 

     @Override 
     public void paint(Graphics g) { 
      try { 
       img = ImageIO.read(new File("logo.jpg")); 
      } catch (IOException e) { 
      } 
      g.drawImage(img, 0, 0, null); 
     } 
    }; 
    window.add(view); 
    header.add(logo); 
    header.add(info); 
    view.add(header); 
    view.add(content); 
    view.add(foot); 
    window.setLocation(width/2, 100); 
    window.setSize(width, height); 
    window.setPreferredSize(new Dimension(width, height)); 
    content.setSize(window.getWidth(), height-70); 
    content.setPreferredSize(new Dimension(window.getWidth(), height-70)); 
} 

«окна» кадр ... класс не распространяющие JFrame Мой класс будет супер класс для других, подклассы наследуют публичный контент JPanel. В моем суперклассе я пытаюсь установить ширину и высоту трех разделов моего GridLayout, компоненты логотипа и информации составляют до 70 для их высоты ... Я установил другие компоненты (просмотр, заголовок, информация , логотип), так что подклассы не могут получить к ним доступ ...

Когда приложение запускает окно для входа в систему, это отображает и правильно изменяет размер. после входа в экземпляр одного из подклассов создается окно входа в систему, а затем скрытый сайт setVisible (false)

, когда показано новое окно, JFrame имеет правильный размер, но заголовок, содержание и нижний колонтитул а не размеры. Я пробовал устанавливать размер и предпочтительный размер каждого из компонентов, но все еще не работал ... Я также пробовал переименовывать и проверять/проверять

Любые идеи?

ответ

1

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

На самом деле, почему бы не просто создать классы верхнего и нижнего колонтитулов и повторно использовать их вместо того, чтобы подклассифицировать фрейм, чтобы получить тот же заголовок и нижний колонтитул?

0

Попробуйте установить предпочтительные размеры перед добавлением компонентов в контейнеры и добавлением компонентов «снизу вверх». В противном случае попробуйте позвонить pack(), revalidate(), repaint() и т. Д., Чтобы настроить вещи.

Читайте также о менеджерах макетов, вы тоже не используете их правильно.

Кроме того, свинг сосет. Попробуйте Netbeans, это делает его немного более терпимым. Это помогает много, когда вам нужно вручную размещать и изменять размер.

+1

Не используйте среду IDE для генерации графического интерфейса. Узнайте, как написать код самостоятельно, чтобы вы изучали Java, а не среду IDE. – camickr 2010-11-29 16:51:08

+0

Если вы не ненавидите все Java, как и я, но по какой-то причине вы просто должны использовать Swing: P – slezica 2010-11-29 18:15:37

1

Почему вы переопределяете этикетку, чтобы нарисовать изображение?

  1. это то, что метод SetIcon() для
  2. вы никогда не должны прочитать файл в коде пользовательских живописи, так как этот метод вызывается несколько раз
  3. заказ картины, при необходимости, осуществляется в paintComponent() метод.
Смежные вопросы