2009-12-07 61 views
0

我正在寫一個簡單的應用程序,它有一個按鈕,打開一個新窗口,然後顯示一個簡單的圖形用戶界面/文本來檢視用戶的輸入。但出於某種原因,我可以讓JLabel顯示在新窗口中。該應用程序有以下結構:只JLabel沒有顯示

+ mainFrame中 - JFrame的
+ newFrame的 - JFrame的
- + newPanel - 的JPanel
----標題 - JLabel的
----提交按鈕-JButton
...

按鈕和文本框都顯示正常,但Jlabels根本不會顯示出來。我試過使用不同的佈局和所有,但我仍然無法顯示它。在mainFrame樹內的JLabel,工作正常..所以看起來問題是由於newFrame聲明或某事,但然後按鈕不應該顯示。那麼,我很失落,有人可以建議我應該檢查什麼?

謝謝:))

+0

如果您在創建代碼的位置添加JLabel並將其添加到您的控件中,它將會有所幫助。佈局經理也可能很高興知道。 – Joey 2009-12-07 08:15:26

+0

您是否已將JLabel添加到正確的JFrame?你有沒有爲JLabel設置任何文本?一些代碼會很好。 – Ham 2009-12-07 08:19:09

回答

1

確保你做frame.pack()之前,使其可見。

它還可以幫助設置不同部件(不同顏色)的邊界以進行調試,以便查看哪些部件的尺寸爲0,以縮小問題範圍。記錄或突出顯示組件的setSize方法也可以提供幫助。

除此之外,也許發佈一些示例代碼?目前,你的問題相當含糊地回答。

1

首先,你知道JDialogJOptionPane - 這些類通常是更好的顯示另一個彈出窗口的方法。使用2個JFrames非常罕見(儘管有時是明智的做法)。其次,你做了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); 
     } 
    }); 
    } 
} 
0

如果您使用的是一個JLabel作爲佔位符,即用一個空字符串初始化並稍後設置文本:

由於JLabel的大小是在面板放好(即早)時計算出來的並且基於包含的文本,所以最終可能會以一個標籤認爲它的首選大小爲(0,0)。
在這種情況下,您應該通過使用適當的值調用setPreferredSize來告訴標籤應該請求的尺寸。

另一個原因可能是您在周圍面板中使用的佈局管理器。也許你在同一個地方添加了標籤和按鈕,例如BorderLayout.CENTER。這將解釋爲什麼只有其中一個顯示。

0

使用title.setOpaque(true)將JLabel對象的不透明度設置爲true。它將繪製JLabel對象邊界內的每個像素。這解決了我同類型的問題。