7

2 つの JPanel で JSplitPane を作成しようとしています。次のコードを使用します。

 JTable table = new JTable(qualifierModel);
  table.setDefaultEditor(String.class, new QualifierCellEditor());


  JPanel qualiferPanel = new JPanel();
  JScrollPane jp = new JScrollPane(table);
  qualiferPanel.add(new JLabel(Translator.getText("Select one qualifier for each section # from the table.")));
  qualiferPanel.add(jp);
  qualiferPanel.setVisible(true);

  JToolBar btnBar = new JToolBar();
  btnBar.setFloatable(false);
  btnBar.add(Box.createHorizontalGlue());
  btnBar.add(addItemButton);
  btnBar.add(removeItemButton);
  setLayout(new BorderLayout());


  profilePanel.add(new JScrollPane(profileTable), BorderLayout.NORTH);
  profilePanel.add(btnBar, BorderLayout.SOUTH);

  JSplitPane spane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
  spane.setTopComponent(profilePanel);
  spane.setBottomComponent(qualiferPanel);

  setLayout(new BorderLayout());
  add(spane,BorderLayout.CENTER);

ここに画像の説明を入力

表示されていない最初の JPanel に 2 つの追加ボタンを追加しました。最初の JPanel のサイズをどのように調整すればよいですか。

ここに画像の説明を入力

4

2 に答える 2

11

以下を呼び出して、分割ペインの仕切りの位置を調整できます。

spane.setDividerLocation(0.5);

または、次のようにして、2 つの部分の間のスペースを分割する方法を再配置できます。

spane.setResizeWeight(1.0); // equal weights to top and bottom

プロファイル パネルから空白スペースを削除する方法を見つけたいと思うかもしれません。それも役に立ちます。

しかし、本当の問題はフレーム自体のサイズかもしれないと思います. コードのその部分は表示されませんでした。

JFrame の開始サイズを拡大してみて、レイアウトがどのように再配置されるかを確認してください。

(ちなみに、私は通常、右揃えのフロー レイアウトを使用して、ボタンを小さなパネルの右側に配置するように修正します。)

于 2013-08-02T16:24:45.147 に答える
7

もう 1 つの方法は、JPanelの寸法を で設定しsetPreferredSizes(new Dimension(width, height))、 を呼び出すresetToPreferredSizes()ことJSplitPaneです。

JSplitPane の javadocから

コンポーネントのサイズを適切なサイズに変更するには、resetToPreferredSizes を呼び出します。

ユーザーがコンポーネントのサイズを変更する場合、コンポーネントの最小サイズを使用して、コンポーネントを設定できる最大/最小位置を決定します。2 つのコンポーネントの最小サイズが分割ペインのサイズよりも大きい場合、仕切りではサイズを変更できません。JComponent の最小サイズを変更するには、JComponent.setMinimumSize(java.awt.Dimension) を参照してください。

ユーザーが分割ペインのサイズを変更すると、新しいスペースが resizeWeight プロパティに基づいて 2 つのコンポーネント間で分配されます。デフォルトの値 0 は、右/下のコンポーネントがすべてのスペースを取得することを示し、値 1 は、左/上のコンポーネントがすべてのスペースを取得することを示します。

たぶんあなたも使うことができますJSplitPane#setDividerLocation(aDouble)

于 2013-08-02T16:25:06.857 に答える