2017-07-25 4 views
0

現在、JToolBar、JTree、およびRSyntaxTextAreaで構成される単純なSwingアプリケーションがGridBagLayout内に作成されています。JTreeのノードを展開するとGridBagLayoutが最小化されます

現在、JTreeにはトップノードが1つしかなく、子ノードは1つのみです。 Complete UI with JToolBar, JTree and RSyntaxTextArea JToolBarの、JTreeのとRSyntaxTextAreaと完全なUI

JTreeのの最上位ノード、 "最小化" の全体のGridBagLayout種類の拡大: The UI after expanding the top node of the JTree.

私はこのphenominumをGoogleで検索しましたが、しかし、以来、コンソールにエラーメッセージなど何も表示されていないので、私は今や無力です。

RSyntaxTextArea textArea = new RSyntaxTextArea(50, 150); 
textArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA); 
textArea.setCodeFoldingEnabled(true); 
RTextScrollPane sp = new RTextScrollPane(textArea); 

cp.setLayout(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints(); 
c.fill = GridBagConstraints.HORIZONTAL; 

c.gridx = 0; 
c.gridy = 0; 
cp.add(createToolbar(), c); 

c.gridx = 0; 
c.gridy = 1; 
c.ipadx = 90; 
c.fill = GridBagConstraints.BOTH; 
cp.add(createTree(), c); 

c.gridx = 1; 
c.gridy = 1; 
c.fill = GridBagConstraints.HORIZONTAL; 
cp.add(sp, c); 

... 

private JToolBar createToolbar() { 
    JToolBar tb = new JToolBar("Toolbar", JToolBar.HORIZONTAL); 

    JButton ob = new JButton(new ImageIcon("...")); 

    tb.add(ob); 

    tb.setFloatable(false); 
    tb.setRollover(true); 

    return tb; 
} 

... 

private JTree createTree() { 
    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Projects"); 
    JTree tree = new JTree(top); 

    DefaultMutableTreeNode test = new DefaultMutableTreeNode("I'm a test!"); 
    top.add(test); 

    return tree; 
} 

更新:テストの目的のためにあなたのシステム上でコンパイルするには、最小限のコード例:

import java.awt.BorderLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JToolBar; 
import javax.swing.JTree; 
import javax.swing.SwingUtilities; 
import javax.swing.tree.DefaultMutableTreeNode; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class Tester extends JFrame { 

    public Tester() { 
     initializeComponent(); 
    } 

    private void initializeComponent() { 
     JPanel cp = new JPanel(new BorderLayout()); 
     JTextArea textArea = new JTextArea(50, 150); 
     JScrollPane sp = new JScrollPane(textArea); 
     cp.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 0; 
     c.gridy = 0; 
     cp.add(createToolbar(), c); 
     c.gridx = 0; 
     c.gridy = 1; 
     c.ipadx = 90; 
     c.fill = GridBagConstraints.BOTH; 
     cp.add(createTree(), c); 
     c.gridx = 1; 
     c.gridy = 1; 
     c.fill = GridBagConstraints.HORIZONTAL; 
     cp.add(sp, c); 
     setContentPane(cp); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
    } 

    private JTree createTree() { 
     DefaultMutableTreeNode top = new DefaultMutableTreeNode("Projects"); 
     JTree tree = new JTree(top); 
     DefaultMutableTreeNode test = new DefaultMutableTreeNode("I'm a test!"); 
     top.add(test); 
     return tree; 
    } 

    private JToolBar createToolbar() { 
     JToolBar tb = new JToolBar("Toolbar", JToolBar.HORIZONTAL); 
     JButton ob = new JButton("Button"); 
     tb.add(ob); 
     tb.setFloatable(false); 
     tb.setRollover(true); 
     return tb; 
    } 

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

} 
+0

私たちがコンパイルし、実行し、あなたの問題を示す有効な[mcve] a *** small ***プログラムを作成して投稿してください。 –

+0

@HovercraftFullOfEels確かに、私の質問を更新しました。 –

+0

(1-)@AlexanderLeithner、私たちがカスタムクラスにアクセスすることができないので、あなたが投稿したコードは 'MCVE 'ではありません。いずれにせよ、あなたはすでにあなたの答えを持っています。読書をする時間。 – camickr

答えて

2

私はUIを作成するには、次のコードを使用しています

JTreeのトップノードを展開すると、GridBagLayoutの種類全体が「最小化」されます。

コンポーネント全体を表示するための十分なスペースがない場合のGridBagLayoutは、コンポーネントの最小サイズに縮小します。

現在、JToolBar、JTree、およびRSyntaxTextAreaで構成されるSwingアプリケーションは、すべてGridBagLayout内にあります。私はJScrollPaneのにJTreeのを追加する方法

add(toolbar, BorderLayout.PAGE_START); 
add(treeScrollPane, BorderLayout.CENTER); 
add(textAreaScrollPane, BorderLayout.PAGE_END); 

注:

私はデフォルトのフレームのBorderLayoutを使用します。必要に応じてツリーのスクロールバーが表示されます。

実際にGridBagLayoutを使用する場合は、How to Use GridBagLayoutのSwingチュートリアルのセクションを参照して、さまざまな制約を使用する方法を参照してください。フレームサイズが変更されたときにどのコンポーネントがスペースを取るかを制御する "weightx/y"制約から始めたいことがあります。また、「塗りつぶし」制約を見てください。

+0

これは、ダイアログの最後にRSyntaxTextAreaを追加するでしょうか?それは私がそれを表示させたいのではなく、右のJTreeのすぐ隣に表示することです。しかし、縮小について知っておくと良い(しかし、私は実際には十分なスペースがなければならない理由は分かりません)... –

+0

@AlexanderLeithner、「それをJTreeの右隣に表示したい」 - それで、別のBorderLayout制約を使ってテキスト領域を右に置く。チュートリアルを読んでください。私はGridBagLayoutへのリンクを提供しました。 BorderLayoutのセクションもあります。 – camickr

+0

ありがとう、 'weightx/y'を見落としました(しかし前にこのチュートリアルを読んでいました)... –

関連する問題