0

Java の SpringLayout マネージャーを使用すると、非常に奇妙な問題が発生します。プログラムにツールバーを表示しようとしています。私のプログラムの初期の時点では機能していましたが、現在は機能しません。基本的に、JPanel のインスタンス化からレイアウト パラメータを削除すると、JPanel に追加した要素が表示されますが、カスタマイズは行われません。インスタンス化にそのパラメーターがある場合、ツールバーはまったく表示されません。何をジャッキアップしたのか、間違っているのかわかりません。JPanel は中央の JFrame に入ります。これは、BorderLayout から別の SpringLayout に変更しましたが、この問題には影響していないようです。

public class purchaserApp
{
static JFrame mainWindow;                                   //Main window
static JFrame addView = new JFrame ("Add An Item...");      //Add item window
static JFrame aboutView = new JFrame ("About Purchaser");   //About window
static JFrame helpView = new JFrame ("Purchaser Help");     //Help window
static JPanel toolBar, contentArea, previewPane;            //Panels for GUI
static JRootPane root;
static JToolBar toolBar2;
//SpringLayout mainLayout;
JTable table;

public purchaserApp()
{
    makemainWindow();
    makeMenu();
    makeToolbar();
     // makeMainContentView();
    mainWindow.setVisible(true);

}
public void makeToolbar()
{
    SpringLayout tbLayout = new SpringLayout();
    toolBar = new JPanel(tbLayout);     //this is the offending line of code, if I remove "tbLayout" the buttons show up in the GUI but obviously without the customizations I made below...
    JButton toolBarButtons[];
    String buttonNames[] = {"Add", "Edit", "Delete"};
    //Instantiate buttons for toolbar
    toolBarButtons = new JButton[3];
    //Resize
    Dimension d = new Dimension (40,55);

    //Add/modify/whatever
    for (i = 0; i < 3; i++)
    {
        toolBarButtons[i] = new JButton(buttonNames[i]);
        toolBarButtons[i].setPreferredSize(d);
        tbLayout.putConstraint(SpringLayout.NORTH, toolBarButtons[i], 5, SpringLayout.NORTH, toolBar);
    }

    //Adjust constraints
    tbLayout.putConstraint(SpringLayout.WEST, toolBarButtons[0], 5, SpringLayout.WEST, toolBar);
    tbLayout.putConstraint(SpringLayout.WEST, toolBarButtons[1], 5, SpringLayout.EAST, toolBarButtons[0]);
    tbLayout.putConstraint(SpringLayout.EAST, toolBarButtons[2], -5, SpringLayout.EAST, toolBar);       //due to x-axis, we must go negative to get inside the frame
    for (i = 0; i < 3; i++)
        toolBar.add(toolBarButtons[i]);

    mainWindow.add(toolBar,BorderLayout.NORTH);   //Lies! Does not add

}

ここにクラスと問題のあるメソッドを含めました。私はこの問題を抱えた最初の人ではないと確信しているので、どんな助けでも大歓迎です。また、これが比較的単純な修正であり、見落としていた場合もお詫び申し上げます。私はまだJava GUI(およびJava全般)に慣れていないので、すみません。

4

2 に答える 2

0

パネルを使用してツールバーを作成しようとしているのはなぜですか? 独自のカスタム レイアウトを使用する JToolBar の何が問題になっていますか?

カスタム ツールバー パネルを作成したとしても、複雑すぎるため、SpringLayout は使用しません。FlowLayout または水平の BoxLayout を使用するだけです。

各レイアウト マネージャーの動作例については、レイアウト マネージャーに関する Swing チュートリアルを参照してください。

于 2011-04-06T04:57:08.223 に答える
0

この関連する質問に記載されているように、特に結果のレイアウトが過度に制約されている場合は、制約指定の順序が重要になる場合があります。バージョンによっては、ここで説明されているように、制約のEAST/SOUTH前に制約を指定する必要がある場合があります。WEST/NORTH

于 2011-04-06T05:21:28.340 に答える