2011-12-18 1 views
1

Я заметил очень странное поведение моей программы сегодня. В основном у меня JToolBar uder, который JScrollPane с JTable. И внутри JPanel внутри JFrame. Каждый контейнер использует MigLayout.Java JTable и JToolBar странно изменяются

Теперь, если я начну приложение, это его значение по умолчанию внешний вид: enter image description here

Но, если я перееду JToolBar и закрепить его обратно в исходное положение, теперь она выглядит следующим образом: enter image description here

Вдруг нет границ. Я бы preffer если Не было ни вообще на первом месте, но изменить внешний вид GUI не хорошая черта вообще ... Пожалуйста, если вы знаете, что это неправильно, помочь :)

КОД:

public class Gui extends JFrame { 

private static final long serialVersionUID = 1L; 
private JPanel mainPnl = null; 
private JToolBar toolbar = null; 
private Session session = null; 

public Gui(Session session) { 
    try { 
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
    } catch (UnsupportedLookAndFeelException e) { 
    } catch (ClassNotFoundException e) { 
    } catch (InstantiationException e) { 
    } catch (IllegalAccessException e) { 
    } 

    this.session = session; 

    setTitle("PRO2-Contact Manager v_0.1"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(800,420); 
    setResizable(true); 

    initMenu(); 
    initMainPnl(); 
    initToolbar(); 
    initTable(); 

    // KeyboardFocusManager manager = 
    // KeyboardFocusManager.getCurrentKeyboardFocusManager(); 
    // manager.addKeyEventDispatcher(new MyDispatcher(aList)); 

    setLocationRelativeTo(null); 
    setVisible(true); 
} 

private void initMenu() { 
    JMenuBar menu = new JMenuBar(); 
    MenuListener ml = new MenuListener(); 

    JMenu file = new JMenu("File"); 
    file.setMnemonic(KeyEvent.VK_F); 
    menu.add(file); 

    JMenuItem exit = new JMenuItem("Exit"); 
    exit.setMnemonic(KeyEvent.VK_E); 
    exit.addActionListener(ml); 
    file.add(exit); 

    JMenu help = new JMenu("Help"); 
    help.setMnemonic(KeyEvent.VK_H); 
    menu.add(help); 

    JMenuItem controls = new JMenuItem("Controls"); 
    controls.setMnemonic(KeyEvent.VK_C); 
    controls.addActionListener(ml); 
    help.add(controls); 

    JMenuItem about = new JMenuItem("About"); 
    about.setMnemonic(KeyEvent.VK_A); 
    about.addActionListener(ml); 
    help.add(about); 

    setJMenuBar(menu); 
} 

private void initMainPnl(){ 
    mainPnl = new JPanel(new MigLayout()); 

    add(mainPnl); 
} 

private void initToolbar() { 
    toolbar = new JToolBar(JToolBar.HORIZONTAL); 
    toolbar.add(new JButton()); 
    mainPnl.add(toolbar,"wrap"); 
} 

private void initTable() { 
    MyTable table = new MyTable(new MyTableModel(this)); 
    JScrollPane sp = new JScrollPane(table); 
    sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 

    mainPnl.add(sp,"w 100%, h 100%"); 
}} 
+0

Как вы называете 'new MenuListener()'? 'MenuListener '- это интерфейс. – Paul

+0

Было бы также полезно, если бы вы разместили пример, который продемонстрировал вашу проблему с классами, которые поставляются вместе с JDK, если причиной вашей проблемы являются ваши сторонние классы (miglayout, mytable). Без дополнительных классов люди не могут запускать ваш код, который ограничивает их способность помочь. Метод 'main' тоже был бы хорош. – Paul

ответ

0

Технически, JToolBar может быть добавлен в контейнер с любым ограничением компоновки. Автоматическое повторное добавление плавающего инструмента панели в контейнер поддерживается только в случае BorderLayout. Вместо добавления к mainPanel, добавьте его в ContentPane:

private void initToolbar() { 
    toolbar = new JToolBar(JToolBar.HORIZONTAL); 
    toolbar.add(new JButton()); 
    add(toolbar, BorderLayout.NORTH); 
} 

КСТАТИ: ваш код не компилируется за пределами вашего контекста - MyPanel, MyTableModel, MenuListener местные классы не доступны в другом месте, плюс он отсутствует главный метод. Для лучшей помощи скорее рассмотрите возможность поставки SSCCE в будущем :-)

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