2017-05-18 6 views
-1

JButtonを使用して特定のタイプのプロジェクトを管理し、プロジェクトツリーを下に印刷するシンプルなスイングアプリケーションがあります。プロジェクトのオープン時にスクリーンショットを参照してくださいアプリの中で: App screenshoot with project openedJScrollPane + JTreeの初期化後の表示

事は何もプロジェクトが開かれていないとき、私はこのような何かを取得されています App screenshoot without project opened

をHMIは簡単で、次のようになります。

public class Desktop extends JFrame implements ActionListener { 
    public Desktop() { 

    JButton newProject, generate, quit, bAddToClassPath, openProject, saveProject; 
    JPanel mainPanel; 
    JScrollPane jscrollpane; 

    super("MainWindow"); 
    setLookAndFeel(); 
    setSize(330, 440); 
    ParamMainPanel(); 
    setVisible(true); 
    } 

    public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
     new Desktop(); 
     } 
    }); 

    } 

    public static void ParamMainPanel() { 
    mainPanel = new JPanel(new FlowLayout()); 

    // BUTTONS PARAM 
    newProject = new JButton("Nouveau projet"); 
    generate = new JButton("Générer..."); 
    quit = new JButton("Quitter"); 
    openProject = new JButton ("Ouvrir projet"); 
    saveProject = new JButton ("Sauvegarder"); 

    bAddToClassPath = UIUtil.iconButton(); 
    bAddToClassPath.setActionCommand("setCP"); 
    bAddToClassPath.addActionListener(this); 
    mainPanel.add(bAddToClassPath); 

    newProject.addActionListener(this); 
    newProject.setActionCommand("newP"); 
    generate.addActionListener(this); 
    generate.setActionCommand("gen"); 
    quit.addActionListener(this); 
    quit.setActionCommand("qui"); 
    openProject.addActionListener(this); 
    openProject.setActionCommand("openP"); 
    saveProject.addActionListener(this); 
    saveProject.setActionCommand("save"); 

    mainPanel.add(newProject); 
    mainPanel.add(generate); 
    mainPanel.add(openProject); 
    mainPanel.add(saveProject); 
    mainPanel.add(quit); 

    // PROJECT TREE 
    jscrollpane = new JScrollPane(new JTree()); 
    jscrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    jscrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED); 
    jscrollpane.setMinimumSize(new Dimension(50, 50)); 
    jscrollpane.setLocation(4,61); 
    jscrollpane.setSize(306,322); 
    mainPanel.add(jscrollpane); 
    } 

} 

だから私は、アプリケーションの起動時に、プロジェクトを開いていない状態でJTree(jscrollpaneに表示)を表示し、プロジェクトツリーを表示せずにプロジェクトを開いて(白いブロック)表示しています。 私はそれを行う方法、任意のアイデアを見つけることができませんか?

+1

1) 'jscrollpane.setHorizo​​ntalScrollBarPolicy(30);'タスクの定数が定義されている場合は、「マジックナンバー」を使用しないでください。この定数はコンパイル時のチェックの恩恵を受けるでしょうし、しばしば人が読むことができます。 2)すぐに助けを得るために、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+0

アドバイスをいただき、ありがとうございました。私は「マジックナンバー」の編集を行っていました。なぜなら、それはディスプレイの問題なので、プロジェクト固有のタイプ全体を説明する必要はないと思っていました。 –

+0

MCVE/SSCCEはどこですか? –

答えて

-1

ここで私は、この表示の問題を解決することが分かっ答え:私のメインパネルは何とか直接だから私は私のメインフレーム上のセカンダリパネルを持っていることにしましたsetSize() を使用して、私のjscrollpaneのサイズを変更するから私を防ぐた上で使用

FlowLayoutsecondMainPanelnew JPanel(null);

を使用して、特定のレイアウトせずに私はその後、私は正しい表示を持っている問題なく、それのサイズを変更することができ、それにjscrollpaneを追加しました。

私はそれを修正する方が良いかもしれないと思いますが、これは動作します。

+0

* "新しいJPanel(null);を使って特定のレイアウトを使わないで、' MainFrame'' secondMainPanel'にセカンダリパネルを作ることにしました。*これはさらに問題を引き起こすハックほど解決策ではありません。 Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 –

関連する問題