1

我编写了这个代码示例来说明我的程序遇到的问题。

我希望能够将 JSplitPane 的滑块滑到左侧,超出按钮的边缘,压缩该 JPanel,并让 FlowLayout 将按钮包装到第二行。

相反,JSplitPane 不允许我将滑块移过屏幕上最右侧的按钮,如果我调整整个 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);
    }
}
4

2 回答 2

7

除了 FlowLayout 之外,还有其他布局管理器可以满足我的需求吗?

环绕布局应该可以工作。

于 2011-04-19T01:17:25.963 回答
1

如果你添加这个

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

在 pack() 之前,它会回流。但是,它不会重新包装边框布局,因此您将得到一条而不是两条线,其余的被切断。因此,在调整大小后,您必须重新打包边框布局。如果您省略边框布局,那么它将按照您的意愿重新排列。

也就是说,你应该避免像瘟疫一样的 FlowLayout。Swing 附带的大多数布局都很糟糕,但 FlowLayout 是最严重的违规者之一。

于 2011-04-18T23:04:58.913 回答