私のJPAnelとそのコンポーネントがJAPPLETで見ることができません -- java フィールド と swing フィールド 関連 問題

I can't see my JPanel and its components in the JApplet












0
vote

問題

日本語

JApplet で<コード> JPanel を入れたい場合、問題は表示できないことです。(<コード> paintComponent JPanel のコード>は何も見えません。 paintComponenet メソッドを削除し、色を設定するこのパネルの背景に、 JPanel は<コード> JApplet を記入し、それでもコンポーネントは表示されていません。-sは別のレイアウトを試しました。 <コード> module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 0 を埋める別のパネルの中心の中心は何も変わらず、まだコンポーネントなしで、背景画像が表示されません:(

<事前> <コード> module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 1

上記のコードはコンパイルできます。私の module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 3 も私の module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 4 module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 2 を追加することはできません。 module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 5 と<コード> module List = let divideAt predicate list = let rec divideAt' acc = function | [] -> (List.rev acc, []) | h::_ as ls when predicate h -> (List.rev acc, ls) | h::t -> divideAt' (h::acc) t divideAt' [] list 6 iはコンソールに印刷されていましたが、3回印刷されました。 :(

英語

I want to put a JPanel in a JApplet, the problem is that I can't see it :( I've overridden the paintComponent of my JPanel in order to have a background image, but I can't see anything. When I remove the paintComponenet method that I had overriden, and set a color to the background of this panel, it seems that JPanel fills the JApplet and still no component is visible :-S I've tried different layouts. I also put my panel in the center of another panel which fills my JApplet but nothing changed, and still no component and no background image is visible :(

import java.awt.BorderLayout; import java.awt.Graphics;  import javax.swing.ImageIcon; import javax.swing.JApplet; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea;   public class Main extends JApplet implements Runnable{  private JTextArea display; private Thread outputThread; JPanel boardPanel;  private ClientViewManager view;  @Override public void init() {      try {         javax.swing.SwingUtilities.invokeAndWait(new Runnable() {             public void run() {                 createGUI();             }         });     } catch (Exception e) {         System.err.println("createGUI didn't successfully complete");     }  }  private void createGUI() {      display = new JTextArea(4, 30);     display.setEditable(false);     getContentPane().add(new JScrollPane(display), BorderLayout.SOUTH);      setFocusable(true);     setVisible(true);     setName("CE Tanks");     setSize(600, 600);     setLocation(100, 100);      boardPanel = new JPanel();     boardPanel.setLayout(null);     boardPanel.setBackground(new java.awt.Color(128, 255, 255));     getContentPane().add(boardPanel, BorderLayout.CENTER);  }  public void start() {     outputThread = new Thread(this);     outputThread.start(); }  public void run() {                 view = new ClientViewManager();                 boardPanel.add(view);                 boardPanel.repaint();                 repaint();     } }    class ClientViewManager extends JPanel { private int rows=8; private int columns=8;  public ClientViewManager() {     super(null);      JLabel lb= new JLabel("lb.jpg");     lb.setLocation(10, 10);     lb.setSize(50, 50);     lb.setOpaque(false);     lb.setVisible(true);      this.add(lb); }  public void paintComponent(Graphics g) {      g.drawImage(new ImageIcon("ground.jpg").getImage(), 0, 0, columns * 50,             rows * 50, this); }  } 

The code above can be compiled. I cant even add Keylistener to neither my JPanel nor to my JApplet. I used java.awt.KeyEventDispatcher and in dispatchKeyEvent(KeyEvent e) I printed something in console but, it was printed 3 times. :(

</div
     
   
   

回答リスト

5
 
vote

背景画像を持つためにJPanelの絵本の絵本に乗り越えました、

しかし、あなたはあなたのアプレットにカスタムコンポーネントを追加しませんでした:

<事前> <コード> //boardPanel = new JPanel(); boardPanel = new ClientViewManager();

また:

  1. SetVisible()を取り除きます。これはプログラム内のいずれのコントロールには必要ありません。デフォルトでは、最上位コンテナ(JFrame、JDialogなど)を除くすべてのコンポーネントはすでに表示されています。 JAPPLETの場合は、アプレットを表示するプロセスの一部であるため、表示させる必要はありません。
  2. setsize()とsetlocation()を取り除くこの方法でアプレットの位置を制御することはできません。
  3. PaintComponent()メソッドでイメージファイルを読みません。このメソッドは、スイングが再描画される必要があるときはいつでもこのメソッドが呼び出されるので効率的ではありません。
  4. JLABELSはデフォルトでは不透明ですので、setOpaqueメソッドを呼び出す必要はありません。
  5. カスタムペイントを実行するときは、コンポーネントのgetPreferredSize()メソッドをオーバーライドしてカスタムペイントの適切なサイズを返してください。レイアウトマネージャはこの情報を使用できます。この場合、ボーダーラインアウトの中央にパネルを追加しました。何が起こるかを見るために北にパネルを追加してみてください。
  6. 編集:

    今すぐあなたがClientViewManagerを追加している場所を見ます。なぜあなたがスレッドでこれをやろうとしているのかわからないが、もう一度いくつかの問題がある。

    1. ビデーブルGUIからコンポーネントを追加/削除すると、基本コードは次のとおりです。

      panel.add(...);
      Panel.Revalidate()
      Panel.Repaint();

    2. しかし、これはヌルのレイアウトを使用していて、パネルのサイズが0です。適切に。

 

I've overridden the paintComponent of my JPanel inorder to have a background image,

But you didn't add the custom component to your applet:

//boardPanel = new JPanel(); boardPanel = new ClientViewManager(); 

Also:

  1. get rid of setVisible(). This is not required for any of the controls in your program. By default all components except top level Container (Jframe, JDialog etc) are already visible. In the case of JApplet, you don't need to make it visible as this is part of the process of displaying an applet.
  2. get rid of setSize() and setLocation() you can't control the position of the applet this way.
  3. Don't read the image file in the paintComponent() method. This is not efficient as this method is invoked whenever Swing determines the component needs to be repainted.
  4. JLabels are opaque by default so there is not need to invoke the setOpaque method.
  5. When doing custom painting you should also override the getPreferredSize() method of the component to return the proper size of the custom painting so layout managers can use this information. It works in this case because you added the panel to the CENTER of the BorderLayout. Try adding the panel to the NORTH to see what happens.

Edit:

Now I see where you are adding the ClientViewManager. I'm not sure why you are trying to do this with a Thread but once again there are several problems.

  1. When you add/remove components from a visble GUI then the basic code is:

    panel.add(...);
    panel.revalidate();
    panel.repaint();

  2. However this still won't work because you are using a null layout and the size of the panel is 0. Use a proper layout manager and implement the getPreferredSize() method as suggest above and the component will be displayed properly.

</div
 
 
         
         
-4
 
vote

NetBeansのGUIビルダーを使用してそのようなGUIを構築してから、生成されたコードをコードに比較することをお勧めします。 NetBeansの結果は、スイングコードを作成するのに役立ちます。

 

I recommend you to use the GUI Builder of Netbeans to build a GUI like that, and then compare the generated code to your code. Netbeans results really useful to help you create swing code.

</div
 
 
         
         

関連する質問

34  スイングJComboboxを列挙されている  ( Populating swing jcombobox from enum ) 
java.swing JComboBox に<コード> Enum 。からの値を設定します。 e.g。 <事前> <コード> public enum Mood { HAPPY, SAD, AWESOME; } とこれら3つの値にreadonly J...

1  Windows 7を使用したJavaアプリケーション - 互換性の懸念はありますか?  ( Java applications with windows 7 are there compatibility concerns ) 
Windows 7の周りにいくつかのfuzzを使って、誰かがWindows 7とのJava互換性に関する経験を持っていますか?これが心配になるか、プログラムはおそらく仕事をしていますか? 誰かがスイングアプリケーションで経験しているのであれば特に興味があるで...

99  JavaでカスタムJButtonを作成します  ( Creating a custom jbutton in java ) 
ボタンの内側の画像だけでなく、独自のボタングラフィックで<コード> JButton を作成する方法はありますか? そうでない場合は、Javaのカスタム<コード> JButton を作成する別の方法がありますか? ...

10  Javaコンパイル - コードの一部を無視するようにコンパイラに指示する方法はありますか?  ( Java compilation is there a way to tell the compiler to ignore parts of my cod ) 
私はJava Swingアプリケーションを維持します。 Java 5との下位互換性のため(アップルマシンの場合)は、2つのコードベースを維持します.1 Java 6からの機能を使用して、それらの機能なしでは別の機能を使用しています。 Java 6機能を使用...

5  スクリーン上のキーボードを振る  ( Swing on screen keyboard ) 
Windows XPのJavaのキオスクシステムに取り組んでいます。そしてオンスクリーンキーボードをする必要があります。どうやってやるのかについてはわかりません。それであなたはこれをやるために私を助けてください。どれでもそれについていくつかの考えがあります。...

4  JavaでLookAndFeelファイルを設定する方法は?  ( How can i setup lookandfeel files in java ) 
JDK 1.6でLookAndFeelファイルを設定する必要があります。 私は2つのファイルがあります: napkinlaf-swingset2.jar napkinlaf.jar どのようにしてこれを設定して使用できますか? 私はGTKの...

21  フレームが表示された後にsetDundecorated()を呼び出す方法は?  ( How to call setundecorated after a frame is made visible ) 
私のスイングアプリケーションでは、フレーム全体を再作成せずに装飾と回着の切り替え能力を望みます。ただし、APIは、フレームが表示された後に setUndecorated() を呼び出すことはできません。 setVisible(false) を呼び出しても、...

11  Javaアプレットはプリンタを使用できますか?  ( Can a java applet use the printer ) 
Javaアプレットは、テキスト/ HTMLを標準プリンタドライバに簡単に印刷することができる(すべての共通プラットフォームWin / Mac / Linux)? 署名する必要がありますか? ...

1  スイングGUIの変化を追跡する  ( Tracking changes in a swing gui ) 
氏は、JCheckBox、JTextFields、JList、その他のJComponentsがたくさんあるアプリケーションのプロパティページです。 さて、私がする必要があるのは、ユーザーが作成してそれらを保存する変更を追跡することです。 これを実装する正しい方...

41  最高のJava / Swing Browserコンポーネント? [閉まっている]  ( Best java swing browser component ) 
現在立つにつれて、この質問は私たちのQ&AMPにとって良いフィットではありません。フォーマット。私たちは事実、参考文献、または専門知識によって支持されることを期待していますが、この質問は...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有