簡體   English   中英

Java swing GUI創建

[英]Java swing GUI creation

我正在開發Java GUI,我需要:

  1. 第一行中的標簽(僅一個標簽)。
  2. 從第二行開始需要添加說100個按鈕,該按鈕可以擴展到多行(寬度不應超出可見屏幕的范圍)
  3. 在新行中再添加一個標簽
  4. 從下一行說出100個擴展到多行的按鈕(寬度不應超出可見屏幕的范圍)...
  5. [可選]如果組件超過JFrame的高度,則需要向主窗口滾動(僅垂直)

我對流布局有一個奇怪的結果,有時它堅持可見的寬度,有時甚至在一行中設置了500個按鈕。

我已經嘗試了每種布局以及多窗格。 仍然沒有運氣。

請指導.. 只需要一個想法,不需要代碼

更新了代碼 :對不起,這是我對stackoverflow的第一個問題

感謝您的及時答復事實上,我嘗試了很多,這是一個簡單的方法。

            setLayout(new FlowLayout());
    setTitle("JAVA GUI");
    setSize(500,500);
    setVisible(true);       
    add(new JLabel("row 1"));
    JPanel panel1 = new JPanel(new FlowLayout());
    for(int i=0;i<200;i++){     
        panel1.add(new JButton("b"+i));         
    }
    add(panel1);

這里panel1出現在單行中,該行超出了屏幕的可見部分。

我認為可以通過將maximumsize設置為Jframe來解決,但是不知道如何將其大小設置為FULL SCREEN。

您可以嘗試MigLayout。 http://www.miglayout.com/

同樣,這個問題並不是堆棧溢出的真正問題。 提出問題的一個好方法是發布您的代碼,並告訴我們它有什么問題以及應該做什么。

雖然這不是“好的” stackOverflow問題的規范,但我自己對此沒有任何問題。 有些人只能處理代碼以外的任何東西。 我建議,如果您要發布代碼,則麻煩您發布將進行編譯,運行和演示情況的代碼。 它確實可以幫助我們這些人了解您所看到的以及您想做的事情。

您談論的是“行”; 請注意,行和列是諸如GridLayout和GridBagLayout之類的術語,但我認為它們不適合您所描述的內容。

在您的描述中,您沒有說要滾動的內容。 看來您想要整個UI滾動,我現在假設是這樣。

我會嘗試使用帶有垂直布局的BoxLayout的JPanel,用於整個主UI。 您將在其中添加一些內容:

第一個JPanel。

使用FlowLayout設置的另一個JPanel持有第一組按鈕。

下一個JLabel的另一個JPanel

還有第四個JPanel(使用FlowLayout設置),其中包含第二組按鈕。

現在,我將頂級面板放入JScrollPane中,然后將其放入Frame的CENTER部分(具有其默認的BorderLayout),然后看看會發生什么。 說實話,我不確定,但這就是我要開始的事情。

我無法告訴您,如果不運行代碼,為什么有時會出現奇怪的行為。

如先前的評論所述,使用ContentPane是必經之路。 這是您想要的工作示例:

public class Test {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("JAVA GUI");

        JPanel panel1 = new JPanel();
        panel1.setLayout(new BoxLayout(panel1, BoxLayout.Y_AXIS));

        int nbLines = 10;

        for (int i = 0; i < nbLines; i++) {
            JPanel linePanel = new JPanel(new FlowLayout());
            linePanel.add(new JLabel("row " + i));
            for(int j = 0; j < 50; j++) {
                 linePanel.add(new JButton("b" + j));
            }

            panel1.add(linePanel);
        }

        frame.setContentPane(panel1);

        //frame.setSize(500, 500);
        frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
        frame.pack();
        frame.setVisible(true);
    }
}

這就是我得到的:

這就是我得到的

如果要使按鈕向左對齊,可以使用:

JPanel linePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM