2011-04-18 37 views
0

我寫了這段代碼示例來說明我在使用我的程序時遇到的問題。如何在其JSplitPane中進行FlowLayout封裝?

我希望能夠將JSplitPane的滑動條滑動到左側,超出按鈕邊緣,壓縮該JPanel,並讓FlowLayout將按鈕換到第二行。如果我調整整個JFrame的大小來強制壓縮,那麼按鈕(我假設)只是從右邊的那邊跑過來的,而不是在右邊JPanel,在滑動條下面(我想,因爲我顯然看不到它們)。

我在做什麼錯?

import java.awt.*; 
import java.io.*; 
import java.util.*; 
import javax.swing.*; 
public class Driver implements Runnable { 
    public static void main(String[] args) { 
     (new Driver()).run(); 
    } 
    public void run() { 
     try { 
      go(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
    } 
    private void go() throws Exception { 
     JFrame jframe = new JFrame("FlowLayoutTest"); 
     JPanel left = new JPanel(); 
     left.setBackground(Color.RED); 
     left.setLayout(new BorderLayout()); 
     JPanel right = new JPanel(); 
     right.setBackground(Color.BLUE); 
     right.setLayout(new BorderLayout()); 
     JSplitPane topmost = 
      new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, right); 
     jframe.setContentPane(topmost); 
     JPanel bottomleft = new JPanel(); 
     bottomleft.setBackground(Color.GREEN); 
     bottomleft.setLayout(new FlowLayout()); 
     left.add(bottomleft, BorderLayout.PAGE_END); 
     for (int i = 0; i < 10; i++) { 
      bottomleft.add(new JButton("" + i)); 
     } 
     jframe.pack(); 
     jframe.setVisible(true); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

回答

5

除了FlowLayout之外,還有另外一個佈局管理器可以做我想要的嗎?

Wrap Layout應該工作。

1

如果你的包之前添加此

bottomleft.setMinimumSize(new Dimension(0, 0)); 

(),那麼它會迴流。但是,它不會重新包裝邊界佈局,所以不是兩條線,而是將其中一條切斷。因此,在調整大小後,您必須重新包裝邊框佈局。如果你省略邊界佈局,那麼它會像你想要的那樣重新流淌。

這就是說,你應該避免像瘟疫一樣的FlowLayout。 Swing附帶的大部分佈局都很差,但FlowLayout是最糟糕的犯罪分子之一。

+0

問題是,我的程序在BorderLayout的其他部分中有實際的東西,但刪除它們並不會影響'bottomleft'的行爲,所以我的模型忽略了它們。 – Maarx 2011-04-18 23:16:48

+0

除了FlowLayout之外,還有另外一個佈局管理器可以做我正在尋找的東西嗎? (從一行開始,換行到第二個,向上展開組件) – Maarx 2011-04-18 23:19:26

+0

「所以在調整大小之後,您必須重新包裝邊框佈局。」我將在哪裏插入一些代碼來運行「調整大小後」? – Maarx 2011-04-18 23:35:40