JTabbedPane показывает себя случайно - PullRequest
1 голос
/ 29 ноября 2010

проблема, с которой я столкнулся, странная для меня, потому что я делал все шаг за шагом, правильно (на мой взгляд), и, наконец, когда я мог сказать, что закончил одну часть своей программы, это, казалось, высмеивало меня. Фактическая проблема заключается в том, что в GUI, который я создал, я использовал JPanel, а затем поместил его в JTabbedPane, который наконец-то поместил в JFrame. Все хорошо и работает отдельно от времен, когда это не так. Я знаю, это звучит странно, но после запуска программы, однажды я получаю то, что хотел (кадр с панелью с вкладками, содержащей панель с некоторыми элементами), а затем, когда я запускаю ее снова, она либо показывает правильную вещь снова, либо просто пустой кадр. Хуже всего то, что это так случайно, я не имею понятия, что может быть не так, я даже не знаю, что именно я должен Google, чтобы выяснить это. Код:

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.*;

public class GUI extends JFrame {

JFrame frame = new JFrame("WakeOnLan script generator");
JPanel panel1 = new JPanel(null);
JTextArea text; //= new JTextArea("test");
JScrollPane scroll = new JScrollPane();
JButton but = new JButton("test");
JTabbedPane tab = new JTabbedPane();

public GUI() {

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    int w = frame.getSize().width;
    int h = frame.getSize().height;
    int x = (dim.width-w)/3;
    int y = (dim.height-h)/4;

    frame.setSize(500,500);
    frame.setLocation(x,y);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setLayout(null);

    createTab1();

    tab.addTab("Tab 1", panel1);
    tab.setVisible(true);
    tab.setBounds(0, 0, 500, 500);

    frame.add(tab);

}

public void createTab1(){

    text = new JTextArea("test");
    text.setVisible(true);

    scroll.setViewportView(text);
    scroll.setBounds(10,10,465,300);

    panel1.setLayout(null);
    panel1.add(scroll);
    panel1.setVisible(true);
    panel1.setSize(500,500);
    //panel.setBackground(Color.blue);
    }

   }

А потом я просто запускаю его в методе main в другом классе:

public class GUIStarter {

public static void main(String[] args) {

    GUI start = new GUI();

}

}

Так кто-нибудь может дать мне ответ или просто подсказку? Спасибо.

1 Ответ

2 голосов
/ 29 ноября 2010

Вы должны позвонить frame.setVisible(true) после , добавив все ваши компоненты в ваш JFrame. Поэтому попробуйте переместить его в конец вашего конструктора.

Кроме того, вы можете позвонить frame.validate() после добавления всех компонентов.

...