0

わかりました、皆さんの助けが必要です。何を見逃したのかわかりませんが、レイアウトを GridBag に設定しても、インセットとアンカーが有効になりません。

ログアウト ボタンをタブペインのすぐ上に配置し、ログアウト ボタンを右上隅に配置する必要があります。つまり、位置 gridx = 0、gridy = 1 のタブ付きペイン。位置 gridx = 0、gridy = 0 のログアウト ボタン。

また、ホーム パネル内にある myaccount ボタン、leftpanel および rightpanel は、適用したインセットを取得しません。

何が欠けていますか。私はこのレイアウトに慣れていないので、助けてください。

TopPanel.java

package MainComponents;

import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.Border;
import MainTab_TabbedPane.TopTabbedPane;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;

public class TopPanel extends JPanel {
//DECLARATION
JButton logOutButton = new JButton("Logout");
TopTabbedPane topTabbedPane = new TopTabbedPane();
private final Border myLineBorder = BorderFactory.createLineBorder(Color.BLACK, 2);

//CONSTRUCTOR    
public TopPanel(){
    setPanelInitialProperties();
    addComponents();
}

//METHODS
private void setPanelInitialProperties(){
    setLayout(new GridBagLayout());
    setBorder(myLineBorder); //sets a Line Border for this panel
}

private void addComponents(){
    GridBagConstraints gbc = new GridBagConstraints();

    gbc.gridx = 0;
    gbc.gridy = 1;
    this.add(topTabbedPane); //adds TabbedPane holding Home, Administration... to this Top Panel

    gbc.gridx = 0;
    gbc.gridy = 0;
    this.add(logOutButton);
}

}

HomeTopPanel.java

package HomeTab;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.Border;

public class HomeTopPanel extends JPanel {

private final JButton MyAccountButton = new JButton("My Account");
private final JPanel leftPanel = new JPanel(new GridBagLayout());
private final JPanel rightPanel = new JPanel(new GridBagLayout());
private final Border leftPanelLineBorder =   BorderFactory.createLineBorder(Color.BLACK, 2);
private final Border rightPanelLineBorder = BorderFactory.createLineBorder(Color.BLACK, 2);

//CONSTRUCTOR
public HomeTopPanel(){
    constructMyAccountButton();
    constructPanels();
    setLeftRightPanelBorders();
    this.setLayout(new GridBagLayout());
}

private void constructMyAccountButton(){
    GridBagConstraints MyAccountButton_gbc = new GridBagConstraints();
    MyAccountButton_gbc.gridx = 0; MyAccountButton_gbc.gridy = 0; 
    MyAccountButton_gbc.anchor = GridBagConstraints.NORTHWEST;
    this.add(MyAccountButton);
}

private void constructPanels(){
    GridBagConstraints leftPanelgbc = new GridBagConstraints();
    GridBagConstraints rightPanelgbc = new GridBagConstraints();

    leftPanelgbc.insets = new Insets(3,3,3,3);
    leftPanelgbc.gridx = 1; leftPanelgbc.gridy = 0;
    leftPanel.setPreferredSize(new Dimension(300, 500));
    this.add(leftPanel);

    rightPanelgbc.insets = new Insets(3,3,3,3);
    rightPanelgbc.gridx = 2; leftPanelgbc.gridy = 0;
    rightPanel.setPreferredSize(new Dimension(300, 500));
    this.add(rightPanel);

}

private void setLeftRightPanelBorders(){
    leftPanel.setBorder(leftPanelLineBorder);
    rightPanel.setBorder(rightPanelLineBorder);
    this.setBorder(leftPanelLineBorder);
}
}

ありがとうございます。見逃したものがあると確信していますが、わかりません。

ここに画像の説明を入力

INSETS は適用されません。=( ??

アップデート:

次のコードでインセットを追加しました。

private void constructPanels(){
    GridBagConstraints gbc2 = new GridBagConstraints();

    gbc2.gridx = 1; gbc2.gridy = 0; 
    gbc2.insets = new Insets(5, 5, 5, 5);
    leftPanel.setPreferredSize(new Dimension(250, 300));
        this.add(leftPanel,gbc2);

    gbc2.gridx = 2; gbc2.gridy = 0; 
    gbc2.insets = new Insets(5, 5, 5, 5);    
    rightPanel.setPreferredSize(new Dimension(300, 500));
        this.add(rightPanel,gbc2);

}

それでも5のインセットは得られません。

ここに画像の説明を入力

4

2 に答える 2

2
GridBagConstraints MyAccountButton_gbc = new GridBagConstraints();

変数名は大文字で始めるべきではありません。あなたの他の名前のほとんどは正しいです。それなら、ずさんな理由はありません。Java の規則に従います。

constructMyAccountButton();
constructPanels();
setLeftRightPanelBorders();
this.setLayout(new GridBagLayout());

コンポーネントをパネルに追加する前に、レイアウトを設定する必要があります。

GridBagConstraints MyAccountButton_gbc = new GridBagConstraints();
MyAccountButton_gbc.gridx = 0; MyAccountButton_gbc.gridy = 0; 
MyAccountButton_gbc.anchor = GridBagConstraints.NORTHWEST;
//this.add(MyAccountButton); // where is the constraint?
this.add(MyAccountButton, myAccountButton_gbc);

実際に制約を使用する必要があります。

于 2016-01-10T18:04:29.727 に答える
2

コンポーネントを追加するときに制約を適用する

add(topTabbedPane, gbc);
于 2016-01-10T17:54:05.327 に答える