2013-04-27 6 views
5

Border Layoutを使って簡単なアプリケーションを作成し、2つのボタンとJTableを追加しました。私はbutton2とJTableの間でJSplitPaneを使用します。私はブロックのデフォルトサイズを再定義したいと思います。どのように私はこの仕事を解決することができますか?ここでBorderLayoutのブロックサイズを変更できません

私のコードです:

package test; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSplitPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class Sample { 

    public Sample() { 
     JFrame app = new JFrame("Sample"); 
     app.setSize(new Dimension(800,600)); 

     JPanel panel = new JPanel(); 
     app.add(panel); 

     BorderLayout borderlayout = new BorderLayout(); 
     panel.setLayout(borderlayout); 

     JButton but1 = new JButton("1"); 
     JButton but2 = new JButton("2"); 
     but2.setMinimumSize(new Dimension(250,0)); 
     String[] colNames = {"Name","Number","Scores"}; 
     Object[][] data = { 
       { "Mark",11,12}, 
       {"Tommy",23,34}, 
       {"John",34,45} 
     }; 
     JTable table = new JTable(data, colNames); 

     JScrollPane scrollpane = new JScrollPane(table); 
     JSplitPane jsplitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,but2,scrollpane); 

     panel.add(but1,BorderLayout.NORTH); 
     panel.add(jsplitpane,BorderLayout.CENTER); 

     app.setVisible(true); 
    } 

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

enter image description here

+0

Mあなたのニーズについてもう少し詳しく説明してください。誰かがあなたに答えてくれるようにしてください:-)あなたが望むものの正確なイメージ、大まかなスケッチは、アイデアを作るために必要なものです。その質問の必要性を理解する。 +1 SSCCE –

答えて

4

の推奨サイズを上書きすることができます:-)ここ

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Dimension; 
import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JSplitPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 

public class Sample { 

    public Sample() { 
     JFrame app = new JFrame("Sample"); 
     app.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     app.setSize(new Dimension(800,600)); 

     JPanel panel = new JPanel(); 
     panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     panel.setLayout(new BorderLayout(5, 5)); 
     JPanel centerPanel = new JPanel(); 
     centerPanel.setLayout(new GridBagLayout());   

     JButton but1 = new JButton("1"); 
     JButton but2 = new JButton("2"); 
     but2.setMinimumSize(new Dimension(250,0)); 
     String[] colNames = {"Name","Number","Scores"}; 
     Object[][] data = { 
       { "Mark",11,12}, 
       {"Tommy",23,34}, 
       {"John",34,45} 
     }; 
     JTable table = new JTable(data, colNames); 

     JScrollPane scrollpane = new JScrollPane(table); 
     JSplitPane jsplitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,but2,scrollpane); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.anchor = GridBagConstraints.FIRST_LINE_START; 
     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.weightx = 1.0; 
     gbc.weighty = 0.3; 

     centerPanel.add(but1, gbc);   

     gbc.fill = GridBagConstraints.BOTH; 
     gbc.gridy = 1; 
     gbc.weighty = 0.7; 

     centerPanel.add(jsplitpane, gbc); 

     panel.add(centerPanel, BorderLayout.CENTER); 

     app.add(panel); 
     app.setVisible(true); 
    } 

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

は同じの出力は次のようになります。

GRIDBAGEXAMPLE

+0

素晴らしい。大変ありがとう。 – veinhorn

6

コンポーネントBorderLayout.PAGE_START場所で尊重好みのサイズの高さを持っています。あなたは以下の貼り付けのコード例で述べたように、私はこのLayoutを推測し、あなたのためにこの仕事をする、と述べた目的のためにGridBagLayoutを使用して喜んでいる場合はそのため、あなたはJButtonbut1

JButton but1 = new JButton("1") { 
    public Dimension getPreferredSize() { 
     return new Dimension(100, 80); 
    }; 
}; 
+0

thxです。申し訳ありませんがタイトルに誤りがありました。しかし、BorderLayout.NORTHのデフォルトサイズを変更することはできますか? – veinhorn

+0

このソリューションを使用しようとしましたが、動作しません。 – veinhorn

+0

デフォルトと変更後のサイズが大きく異なるようにheightパラメータを調整します。マイナーアップデートを参照してください – Reimeus

関連する問題