2017-08-25 15 views
-1

存在し、netbeansデザインを使用して作成されたパネルにテキストフィールドを作成しようとしています。ここにコードです:netbeansを使用して作成された既存のパネルにjtextfieldを作成

私はnetbeansデザインツールを介して作成されたと述べた。 validate、repaint、およびupdateUIは、私はちょうど異なることを試みていて、すべて失敗しました。作成したテキストフィールドは、実行時にパネルに表示されません。他に何をしようか分からない。

次のopenPanelへの参照の追加。そこいくつかの潜在的な問題がここにありますが、一つの大きな問題は、何らかの管理者がその場で新しいコンポーネントを追加する際に扱いやすいようopenPanelが使用するレイアウトマネージャに思われる

javax.swing.GroupLayout openPanelLayout = new javax.swing.GroupLayout(openPanel); 
     openPanel.setLayout(openPanelLayout); 
     openPanelLayout.setHorizontalGroup(
      openPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(openPanelLayout.createSequentialGroup() 
       .addGap(31, 31, 31) 
       .addGroup(openPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(openPanelLayout.createSequentialGroup() 
         .addComponent(saveOpenTermsButton) 
         .addGap(70, 70, 70) 
         .addComponent(deleteOpenTermsButton) 
         .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
        .addGroup(openPanelLayout.createSequentialGroup() 
         .addGroup(openPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(jLabel1) 
          .addComponent(term1TextField, javax.swing.GroupLayout.PREFERRED_SIZE, 267, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 55, Short.MAX_VALUE) 
         .addComponent(term2TextField, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addGap(97, 97, 97)))) 
     ); 
     openPanelLayout.setVerticalGroup(
      openPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(openPanelLayout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(jLabel1) 
       .addGap(34, 34, 34) 
       .addGroup(openPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(term1TextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(term2TextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 143, Short.MAX_VALUE) 
       .addGroup(openPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(saveOpenTermsButton) 
        .addComponent(deleteOpenTermsButton)) 
       .addGap(29, 29, 29)) 
     ); 

     rulesTabbedPanel.addTab("Open Rules", openPanel); 
+1

['openPanel.revalidate()'](https://docs.oracle.com/javase/7/docs/api/javax) /swing/JComponent.html#revalidate())? – nullpointer

+1

@nullpointer:うん、それは 'validate()'よりも優れているので、これを言及しておきます。また、GUIのルック・アンド・フィールを即座に変更しない限り、 'updateUI()'はほとんど呼び出されません。このような質問に対しては有効な[mcve]を投稿するのが最善です。 –

+0

OK、**は** GroupLayoutを使用していますので、別のグループを選択してどのようになっているかを見てください。私の答えの編集を見て、何か質問がある場合はコメントしてください。 –

答えて

1

:これはNetBeansのコードではない私のものですFlowLayoutやGridLayoutなどの他のものよりも、GroupLayoutとnullレイアウトの真のクマに対して、非常に簡単に追加できます。

openPanelでどのレイアウトが使用されているかを調べ、必要に応じてレイアウトを変更してもう一度やり直してください。

もう1つの潜在的な問題は、openPanelのサイズです.JTextFieldを表示して受け入れるのに十分な大きさですか?その周りに境界線を置き、あなた自身のために見てください。


編集:nullポインタで指摘したように、あなたはそれにコンポーネントを変更した後のJPanel上revalidate()を呼び出す必要があり、ないvalidate()、決してupdateUI()あなたはGUIのルックアンドフィールを変更した後、それを呼び出している場合を除きます。それでも問題が解決しない場合は、有効なmcveを作成して投稿してください(リンクをご覧ください)。


編集:OK、あなたの投稿コードがあなたのopenPanel GroupLayoutレイアウトマネージャを与えてくれた、と私は上記の言及のように、このマネージャーは、あなたがコンテナに新しいコンポーネントを追加したいときのために非常に寛容ではないことを示しています急いで。コードはNetBeansによって生成されたものであり、正しいものであるが、レイアウトはあなたによって選択されたものであり、別のものを選択することができます。 openPanelコンテナのプロパティパネルで使用可能なレイアウトを見て、より使いやすいレイアウトを選択します。どれ?それは本当にあなたが作成しようとしているGUIのタイプに依存します。このJPanelにコンポーネントを1つだけ追加する場合は、FlowLayoutを使用するのが最も簡単です。これを試すことができます。また、JPanelをネストすることもできます。それぞれのレイアウトマネージャを使用して、すべてのOSでよく見える快適で複雑なGUIを作成できます。

Layout Manager Tutorialのレイアウトマネージャチュートリアルがあります。また、Swingチュートリアルや他のSwingリソースへのリンクもここにあります:Swing Info

+0

。 :) – nullpointer

0

フィールドサイズとパネルレイアウトが間違っていることはほとんどありません。 openPanelのデフォルトのレイアウトを変更しましたか(これはJPanel、FlowLayoutはJPanelのデフォルトです)? テキストフィールドの値をハードコーディングしてテスト用の境界線を削除することができます

+0

FlowLayoutはnetbeansのデフォルトです。私はずいぶん成功していない別のレイアウトを試しています。私はテキストフィールドの値を厳密にコーディングして、他のものの境界を取り除いてみました... – wsteve

+0

@wsteve:correction:FlowLayoutはSwingのJPanelのデフォルトのレイアウトです。あなたが実験していて、まだ立ち往生している場合は、あなたの質問に更新されたコードを示してください。また、完全に読んで、この答えだけでなく、**すべての**回答に返信することを検討してください。 –

+0

助けてくれてありがとう。私はこの作業をしようとすると時間をかけすぎました。私は1)netbeansデザインですべてのjtextFieldsを作成し、後でコードを実行するときにそれらを埋めてください。または2)ダイアログ/パネルなどを作成してから、jtextfieldsを作成します。私はそれをしてからそれがしばらくしているが、これは動作することを知っている。私はすべての作業を避けようとしていましたが、この時点で意味をなさないかもしれません。私はstackoverflow上のファイル全体を投稿し、誰かがそれを把握できるかどうかを確認することができます。 – wsteve

関連する問題