2011-09-14 132 views
2

我有使用NetBeans編寫的Java應用程序(是的,我在這裏閱讀了大量有關NetBeans的投訴)。當我調整窗口大小時,內容會隨窗口調整大小,直到我將窗口(實際上的高度)縮小到特定大小以下。然後窗口調整大小,但內容剛剛被裁剪。Java窗口內容調整大小,但不會超出最小大小

我檢查了所有的組件小部件。他們都有最小數量爲零或非常小的數字。只有非零大小的那些不會與父母一起調整大小,而且它們也很小。當縮小時,我不會碰到任何小部件。在我無法縮小的時候,面板的底部和底部的小部件之間存在相當大的差距。

有沒有什麼辦法可以告訴我用這種方法限制了尺寸?是否還有其他財產,我應該尋找可能涉及?

謝謝。

+1

請提供一個[sscce](http://sscce.org/),展示您描述的問題。 – trashgod

+1

*「我在這裏閱讀了很多有關NetBeans的投訴」*我對使用任何IDE的人無任何問題,無論他們想要什麼插件。但我反對對代碼進行模糊的描述,或者不得不看看GUI構建者通常流失的臃腫廢話。此外,如果一個問題是「如何製作我的IDE ..?」,那麼我就沒有這個問題了。有更好的事情要做,而不是提供對IDE的支持。即使是提問者需要提及IDE的含義,也增加了一些懷疑,他們不知道他們在做什麼。 –

+0

這些都在LayoutManager中......它們可以自由調整尺寸,但是它們是專門設計的。選擇一個行爲像你想要的經理。 – kleopatra

回答

1

是非常簡單的解決方案只覆蓋和返回getMinimumSize()

例如

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class CustomComponent extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public CustomComponent() { 
     setTitle("Custom Component Test"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public void display() { 
     add(new CustomComponents(), BorderLayout.NORTH); 
     add(new CustomComponents(), BorderLayout.CENTER); 
     add(new CustomComponents(), BorderLayout.SOUTH); 
     add(new CustomComponents(), BorderLayout.EAST); 
     pack(); 
     // enforces the minimum size of both frame and component 
     setMinimumSize(getMinimumSize()); 
     setPreferredSize(getPreferredSize()); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     CustomComponent main = new CustomComponent(); 
     main.display(); 
    } 
} 

class CustomComponents extends JLabel { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public Dimension getMinimumSize() { 
     return new Dimension(200, 100); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(300, 200); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     int margin = 10; 
     Dimension dim = getSize(); 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2); 
    } 
} 
+0

這會有幫助嗎?當我檢查NetBeans爲構建對話框而生成的原始源時,只有少數項目的最小大小設置爲任何值,而且它們很小(85x16)。此外,你是否說我應該繼承每個面板以覆蓋getMinimumSize()?這隻會是必要的,我認爲,如果setMinimumSize不起作用。那是壞了嗎?謝謝。 –

+0

因爲我是NetBeans用戶,所以我從未使用內置的Java桌面應用程序,請確保必須存在用於生成代碼或輸入自定義方法的選項,但問題是如果允許或支持,您有優勢每小時創建一次GUI,但我的優勢是完全控制JComponents,這裏是一切http://download.oracle.com/javase/tutorial/uiswing/components/index.html,但需要手動編碼:-) – mKorbel

+0

+ 1用於演示如何覆蓋自定義組件中的大小。我不明白在display()中調用'setMinimumSize()'和'setPreferredSize()'的原因。 – trashgod

0

我們可以看到一些示例代碼?我相信它不是窗口,而是窗口內的內容不會超出某個特定的位置。

+0

瘋狂猜測? – kleopatra