3

jpanel にタブを追加したいときに簡単な問題があります。タブの配置が垂直ではなく水平になり、がらくた =/ のようになります。

次のようになります。

ここに画像の説明を入力

代わりにパネルを破棄し、tabbedPane をフレームに直接追加すると、すべて正常に動作します。コードの 3 行のコメントを外して削除するとgetContentPane().add(jtp);、問題を再現できます。

作業コード:

public class TabbedPane extends JFrame
{
    public TabbedPane()
    {
        setTitle("Tabbed Pane");
        setSize(300, 300); // set size so the user can "see" it
        JTabbedPane jtp = new JTabbedPane();

        // JPanel panel = new JPanel();//uncomment all three lines
        // panel.add(jtp);
        // getContentPane().add(panel);

        getContentPane().add(jtp);//remove me

        JPanel jp1 = new JPanel();// This will create the first tab
        JPanel jp2 = new JPanel();// This will create the second tab

        JLabel label1 = new JLabel();
        label1.setText("This is Tab 1");
        jp1.add(label1);

        jtp.addTab("Tab1", jp1);
        jtp.addTab("Tab2", jp2);

        JButton test = new JButton("Press");
        jp2.add(test);

        setVisible(true); // otherwise you won't "see" it
    }

    public static void main(String[] args)
    {
        TabbedPane tab = new TabbedPane();
    }

}

どうもありがとう!

4

5 に答える 5

4

代わりにパネルを破棄tabbedPaneしてフレームに直接追加すると、すべて正常に動作します。

のデフォルトのレイアウトJPanelFlowLayout、「各コンポーネントが自然な (推奨される) サイズを想定できるようにする」 です。のデフォルト レイアウトJFrameBorderLayoutで、 のCENTERは優先サイズを無視します。いずれの場合も、呼び出すsetSize()とレイアウトが最初に機能しなくなります。フレームのサイズを変更して効果を確認します。代わりに、 「サブコンポーネントの優先サイズとレイアウトに合わせてpack()これをサイズ変更する」を使用します。Window

setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true); // otherwise you won't "see" it
于 2013-01-28T00:34:45.673 に答える
1

まず、これを試すことができます:

    JPanel panel = new JPanel();//uncomment all three lines
    panel.setLayout(new GridLayout());
    JPanel jp1 = new JPanel();// This will create the first tab
    JPanel jp2 = new JPanel();// This will create the second tab

    JLabel label1 = new JLabel();
    label1.setText("This is Tab 1");
    jp1.add(label1);

    jtp.addTab("Tab1", jp1);
    jtp.addTab("Tab2", jp2);

    JButton test = new JButton("Press");
    jp2.add(test);
    getContentPane().add(jtp);

そして主に:

    TabbedPane tab = new TabbedPane();
    tab.pack();
    tab.setVisible(true);

MigLayoutを使用してレイアウトを設定することをお勧めします。これにより、作業が楽になります。それが役に立てば幸い。

于 2013-01-27T23:01:47.250 に答える
1

GridbagLayoutを試してください。マスターすれば、このレイアウトであらゆる種類の UI をデザインできます。

于 2013-01-28T16:31:38.543 に答える
0

の使用に関してprasanthに同意しますGridBagLayout

私はこの問題を一度経験し、JTabbedPaneを介してパネルに を追加することで解決しました。オブジェクトの要件に従って、を使用してをGridBagLayout追加してください。JTabbedPaneipadxipadyGridBagConstraints

JPanel myPanel=new JPanel();
myPanel.setLayout(new GridBagLayout());
JTabbedPane jTP=new JTabbedPane();
jTP.add("Tab1",new JPanel());//substitute your component instead of "new JPanel"
GridBagConstraints myConstraints=new GridBagConstraints();
myConstraints.ipadx=400;//streches the component being added along x axis - 200 px on both sides
myConstraints.ipady=600;//streches the component being added along y axis - 200 px on both sides
myPanel.add(jTP,myConstraints);

ニーズに最適なものに応じて、これらの両方のプロパティを調整できます

于 2013-09-03T10:21:01.053 に答える