0

新しいウィンドウを開き、ユーザーからの入力を受け入れるための単純な GUI/テキストを表示するボタンを持つ単純なアプリケーションを作成しています。しかし、何らかの理由で、新しいウィンドウに JLabel を表示することができます。アプリケーションの構造は次のとおりです。

+mainFrame - JFrame
+newFrame - JFrame
-+newPanel - JPanel
----title - JLabel
----submitButton -JButton
...

ボタンとテキストフィールドはすべて問題なく表示されますが、Jlabels はまったく表示されません。さまざまなレイアウトを使用してみましたが、まだ表示できません。mainFrameツリー内のJLabelsは正常に動作します..問題はnewFrame宣言か何かによるもののようですが、ボタンも表示されるべきではありません。さて、私はちょっと道に迷ってしまったのですが、何をチェックすればよいか教えてもらえますか?

ありがとう : )

4

4 に答える 4

1

表示する前に、必ず frame.pack() を実行してください。

また、問題を絞り込むために、サイズが 0 になっている/出ていないコンポーネントを確認するためだけに、デバッグ用にさまざまなコンポーネント (さまざまな色) に境界線を設定することも役立ちます。コンポーネントの setSize メソッドのロギングまたはブレークポイントも役立ちます。

それとは別に、サンプルコードを投稿していただけませんか?現時点では、あなたの質問は答えるのがかなり曖昧です。

于 2009-12-07T08:24:08.660 に答える
1

まず、 JDialogJOptionPaneについて知っていますか?これらのクラスは、多くの場合、別のポップアップ ウィンドウを表示するためのより良い方法です。2 つの JFrame を使用することは非常にまれです (ただし、賢明な方法である場合もあります)。

次に、pack() と setVisible(true) を実行しましたか?

以下のコードは私にとってはうまくいきます。これはあなたにとって壊れており、それはあなたの Java 実装に関する何かであるか、何か違うことをしているに違いありません。その場合、それが何であるか教えてください:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JLabelShower {
  public static void main(String [] args) {
    JFrame mainFrame = new JFrame("main frame");
    JButton popup = new JButton("start new frame");
    mainFrame.getContentPane().add(popup);
    mainFrame.pack();
    mainFrame.setVisible(true);

    popup.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JFrame newFrame = new JFrame("new frame");
        JPanel newPanel = new JPanel();
        JLabel title = new JLabel("title");
        newPanel.add(title);
        newFrame.setContentPane(newPanel);
        newFrame.pack();
        newFrame.setVisible(true);
      }
    });
  }
}
于 2009-12-07T08:31:47.030 に答える
0

title.setOpaque(true) を使用して JLabel オブジェクトの不透明度を true に設定します。JLabel オブジェクトの境界内のすべてのピクセルをペイントします。これにより、同じタイプの問題が解決されました。

于 2013-09-24T11:13:01.350 に答える
0

JLabel をプレースホルダーとして使用している場合、つまり空の文字列で初期化し、後でテキストを設定する場合:

JLabel のサイズは、パネルがレイアウトされるとき (つまり初期段階) に計算され、含まれるテキストに基づいているため、(0, 0) の優先サイズがあると考えるラベルになる可能性があります。
この場合、setPreferredSizeを適切な値で呼び出して、ラベルが要求するサイズをラベルに伝える必要があります。

また、別の原因として、周囲のパネルで使用しているレイアウト マネージャーが考えられます。おそらく、BorderLayout.CENTER のように、ラベルとボタンを同じ場所に追加しているのでしょう。これで、2 つのうちの 1 つだけが表示される理由が説明できます。

于 2009-12-07T09:38:26.633 に答える