2009-12-07 3 views
0

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

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

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

спасибо:)

+0

Это поможет, если вы включили код, в котором вы создаете, и добавление JLabels к вашим элементам управления. И менеджер компоновки может быть приятно узнать. – Joey

+0

Вы добавили JLabel в правильный JFrame? Вы установили какой-либо текст для JLabel? Некоторый код будет приятным. – Ham

ответ

1

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

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

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

1

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

Во-вторых, вы сделали пакет() и 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); 
     } 
    }); 
    } 
} 
0

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

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

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

0

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

Смежные вопросы