только JLabel не появляется - PullRequest
0 голосов
/ 07 декабря 2009

Я пишу простое приложение, в котором есть кнопка, которая открывает новое окно, а затем отображает простой графический интерфейс / текст, чтобы принимать входные данные от пользователя. но по какой-то причине я могу заставить JLabel отображаться в новом окне. Приложение имеет следующую структуру:

+ mainFrame - JFrame
+ newFrame - JFrame
- + newPanel - JPanel
---- название - JLabel
---- submitButton -JButton
...

Все кнопки и текстовые поля отображаются нормально, но Jlabels не будет отображаться вообще. Я пытался использовать разные макеты и все, но я все еще не могу показать это. JLabels внутри дерева mainFrame, работает нормально ... так что, похоже, проблема в объявлении newFrame или чем-то еще, но кнопка также не должна отображаться. Ну, я как-то заблудился, и может кто-нибудь подсказать мне, что мне следует проверить?

Спасибо:)

Ответы [ 4 ]

1 голос
/ 07 декабря 2009

Во-первых, знаете ли вы о JDialog и JOptionPane - эти классы часто являются лучшим способом показать другое всплывающее окно. Очень редко можно использовать 2 JFrames (хотя иногда это разумно).

Во-вторых, вы сделали pack () и setVisible (true)?

Приведенный ниже код отлично работает для меня. Либо это ломает вас, и это что-то в вашей реализации Java, либо вы должны делать что-то другое, в этом случае вы можете сказать нам, что это такое:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JLabelShower {
  public static void main(String [] args) {
    JFrame mainFrame = new JFrame("main frame");
    JButton popup = new JButton("start new frame");
    mainFrame.getContentPane().add(popup);
    mainFrame.pack();
    mainFrame.setVisible(true);

    popup.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JFrame newFrame = new JFrame("new frame");
        JPanel newPanel = new JPanel();
        JLabel title = new JLabel("title");
        newPanel.add(title);
        newFrame.setContentPane(newPanel);
        newFrame.pack();
        newFrame.setVisible(true);
      }
    });
  }
}
1 голос
/ 07 декабря 2009

Убедитесь, что вы делаете frame.pack (), прежде чем сделать его видимым.

Это также может помочь установить границы для разных компонентов (разных цветов) для отладки, просто чтобы увидеть, какие компоненты имеют / не имеют размер 0, чтобы сузить вашу проблему. Ведение журнала или определение точки останова методом setSize компонента также может помочь.

Кроме этого, может быть, выложить пример кода? На данный момент ваш вопрос довольно неопределенный, чтобы ответить.

0 голосов
/ 24 сентября 2013

Установите непрозрачность объекта JLabel в true, используя title.setOpaque (true). Он будет рисовать каждый пиксель в пределах объекта JLabel. Это решило мою проблему того же типа.

0 голосов
/ 07 декабря 2009

Если вы используете JLabel в качестве заполнителя, то есть инициализируйте его пустой строкой и установите текст позже:

Поскольку размер JLabel рассчитывается, когда панель размещается (то есть на раннем этапе) и основана на содержащемся тексте, вы, вероятно, в итоге получите метку, считая, что она имеет предпочтительный размер (0, 0).
В этом случае вы должны сообщить метке, какого размера она должна запрашивать, вызвав setPreferredSize с соответствующим значением.

И еще одной причиной может быть менеджер компоновки, который вы используете на окружающей панели. Возможно, вы добавляете ярлык и кнопку в одном месте, например, BorderLayout.CENTER. Это объясняет, почему отображается только один из двух.

...