有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Swing组件的位置不正确

我想把按钮btn放在JFrame的底部。我右边有这个。我的代码中的bug在哪里

class MainClass extends JFrame {

    private JSplitPane splitPan=null;

    private void treePanel(){

        DefaultMutableTreeNode nod=new DefaultMutableTreeNode("AAA",true);
        nod.add(new DefaultMutableTreeNode("abcd"));

        JTree tree=new JTree(nod);

        JScrollPane scroll=new JScrollPane(tree);

        splitPan=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll,new JLabel("aaaaa"));
        splitPan.setSize(this.getMaximumSize());

        add(splitPan);
    }


    public MainClass() {

        setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));

        treePanel();    
        add(new JButton("btn")); 

        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300,200);
        setVisible(true);
    }
}

共 (3) 个答案

  1. # 1 楼答案

    默认情况下,JFrame已经实现了BorderLayout,如果你想把JButton放在JFrame的底部,那么你必须定义add(new JButton("btn", BorderLayout.SOUTH));

  2. # 2 楼答案

    你应该使用^{}而不是X_AXIS

    Components are laid out vertically from top to bottom.

  3. # 3 楼答案

    BoxLayout.Y_AXIS。维斯

    MainClass

    import javax.swing.*;
    import javax.swing.tree.*;
    
    class MainClass extends JFrame {
    
        private JSplitPane splitPan=null;
    
        private void treePanel(){
            DefaultMutableTreeNode nod=new DefaultMutableTreeNode("AAA",true);
            nod.add(new DefaultMutableTreeNode("abcd"));
            JTree tree=new JTree(nod);
            JScrollPane scroll=new JScrollPane(tree);
            splitPan=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll,new JLabel("aaaaa"));
            splitPan.setSize(this.getMaximumSize());
            add(splitPan);
        }
    
        public MainClass() {
            // this is it!
            setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
            treePanel();
            add(new JButton("btn"));
            pack();
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300,200);
            setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new MainClass();
                }
            });
        }
    }