2017-08-06 13 views
2

Javaで簡単なテキストエディタを作成したいと思います。GridBagLayoutを使用して3つのJPanelを1つずつ作成する方法

私は自分のレイアウトを編成し、基本的に3つのJPanelsが必要であるという結論に達しました。 1番目と2番目のものはメニューバーであり、JPanelは2つのJLabelを持つので、高さは非常に短いでしょう。 すべてのテキストがその中に含まれるため、中間のものが最も高い高さのものである必要があります。

私はGridBagLayoutを使う必要があると思うが、うまくいかないと思うので、小さなものより10倍大きいものを占有する必要がある。そしてそれらのすべては、JFrameが提供する幅を利用します。

これまでのコードスニペットがある - 結果はこれであるように私は何を得る

GridBagConstraints gbc = new GridBagConstraints 
gbc.fill = GridBagConstraints.HORIZONTAL; 
gbc.gridx = 0; 
gbc.gridy = 0; 
mainFrame.add(upperGrid, gbc); 
gbc.gridx = 0; 
gbc.gridy = 1; 
gbc.gridheight = 10; 
mainFrame.add(upperGrid, gbc); 
gbc.gridx = 0; 
gbc.gridy = 11; 
mainFrame.add(upperGrid, GBC); 

-

Distorted GridBagLayout

+0

1早いほど良いのヘルプについては、投稿[MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)。 2)ASCIIアート、またはGUIの*意図された*レイアウトの簡単な図を最小サイズで提供し、サイズ変更可能な場合は幅と高さを増やします。 –

+0

私はあなたが['gbc.weighty'](https://docs.oracle.com/javase/8/docs/api/java/awt/GridBagConstraints.html#weighty)に異なる値を使うことでそれを達成できると思います。 –

+2

gbc.weighty = 1.0に設定すると、コンポーネント間の垂直方向の間隔が少し増えますが、それらをJFrameの境界線に固定したい場合は、すべてのスペースを調整する必要があります。他のコンポーネントの境界線の間。 – Thomas

答えて

3

私はあなたのGridLayoutのアイデアをドロップ示唆しています。 BorderLayoutを使用し

メニューバーのために(https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html

    1. 使用JMenuBar

      JFrame frame = new JFrame(); 
      JPanel topPanel = new JPanel(); 
      topPanel.setLayout(new FlowLayout()); 
      topPanel.add(new JLabel("Label 1")); 
      topPanel.add(new JLabel("Label 2")); 
      frame.add(topPanel, BorderLayout.NORTH); 
      JPanel bigPanel = new JPanel(); 
      frame.add(bigPanel, BorderLayout.CENTER); 
      

    ときあなたはグリッドレイアウトを使用することができます私の代わりに次のようにしてくださいたとえば、多くのテキストフィールドを持つダイアログを配置する必要があります。しかし、この "粗い"ものについては、おそらくBorderLayoutが良いでしょう。

    EDITを(おそらく、私は確かに知っていない):あなたは絶対にGridBagLayoutのを使用する必要がある場合、その後、あなたは次の操作を行うこともできます)

    JPanel panel = new JPanel(); 
    GridBagLayout layout = new GridBagLayout(); 
    layout.columnWidths = new int[] { 0, 0 }; 
    layout.rowHeights = new int[] { 0, 0, 0, 0 }; 
    layout.columnWeights = new double[] { 1.0, Double.MIN_VALUE }; 
    layout.rowWeights = new double[] { 0.0, 0.0, 1.0, Double.MIN_VALUE }; 
    panel.setLayout(layout); 
    
    JPanel menuBar = new JPanel(); 
    GridBagConstraints contraints = new GridBagConstraints(); 
    contraints.fill = GridBagConstraints.BOTH; 
    contraints.gridx = 0; 
    contraints.gridy = 0; 
    panel.add(menuBar, contraints); 
    
    JPanel panelForLabels = new JPanel(); 
    contraints = new GridBagConstraints(); 
    contraints.fill = GridBagConstraints.BOTH; 
    contraints.gridx = 0; 
    contraints.gridy = 1; 
    panel.add(panelForLabels, contraints); 
    
    JPanel bigPanel = new JPanel(); 
    contraints = new GridBagConstraints(); 
    contraints.fill = GridBagConstraints.BOTH; 
    contraints.gridx = 0; 
    contraints.gridy = 2; 
    panel.add(bigPanel, contraints); 
    
  • +2

    はい、これは完全に動作します。しかし、私は将来のプロジェクトでGridBagLayoutを使用する必要があり、私が間違っていることを知る必要があるため、この回答を受け入れることはできません。 – Thomas

    +0

    私は自分の答えを編集しました。おそらくそれはあなたを助けるでしょう。 – Professor901

    +2

    ちょっと働いている私は非常に小さい部分を修正しなければならないことを覚えていますが、うまくいきます。ありがとう – Thomas

    関連する問題