2011-12-18 18 views
1

今日私のプログラムは非常に奇妙な動作に気付きました。基本的に私はJToolBarを持っています。これはJTableを持つJScrollPaneです。どちらもJFrame内のJPanel内部にあります。すべてのコンテナはMigLayoutを使用します。Java JTableとJToolBarのサイズ変更がばかげて

私はアプリを起動した場合さて、これはデフォルトの外観です:enter image description here

しかし、私はJToolBarのを移動し、元の位置に戻し、それをクリップしている場合は、ここでは次のようになります。突然そこenter image description here

国境はない。

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

サード・パーティーのクラス(miglayout、mytable)が問題の原因でない限り、JDKに付属のクラスで問題を実証したサンプルを投稿した方がより役に立ちます。余分なクラスがなければ、人々は自分のコードを実行して自分の能力を制限することはできません。 'main'メソッドも素晴らしいでしょう。 – Paul

答えて

0
:私はあなたが間違っているものを知っていれば、:)

CODEを助けて...してください最初の場所でまったくがしゃべれなかった場合prefferが、GUIの外観を変更することは、全く良い機能ではありませんでしょう

技術的には、レイアウト制約を持つコンテナにJToolBarを追加することができます。フローティングツールバーをコンテナに自動的に再追加する機能は、BorderLayoutの場合にのみサポートされます。代わりにmainPanelに追加するので、contentPaneにそれを追加します。ところで

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

:あなたのコードは、あなたのコンテキストの外側をコンパイルしません - どこか他MyPanel、MyTableModel、のMenuListenerはローカルクラスでは利用できませんそれに加えて、メインが欠落しています方法。より良いヘルプを早く得るために、将来SSCCEを提供することを検討してください:-)

関連する問題