首页 文章

BorderLayout显示边框线

提问于
浏览
3

我不是很擅长Java GUI,需要寻求帮助 .

我打算在我的 BorderLayout 以西添加图像,作为我的内容和底部的按钮 .

我创建了一个空边框,在我的南面板和我的西面板和中心面板之间做了一些填充 . 现在我只想在南边界的顶部添加一条线 .

如下面的屏幕截图所示,西面板和中心面板之间也有一条线,我该如何移除该线并将线保持在南面板的顶部?

附上我的代码:

enter image description here

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class test {
    public static void main(String[] args) { 

        JPanel panel1 = new JPanel(new BorderLayout());
        JPanel panel2 = new JPanel(new FlowLayout());
        JPanel panel3 = new JPanel(new FlowLayout());
        JPanel panel4 = new JPanel(new FlowLayout());

        JFrame frame = new JFrame();

        panel2.add( new JLabel( "WEST <will be adding image here>" ));
        panel3.add( new JLabel( "CENTER <contents>"));  
        panel4.add( new JLabel( "SOUTH <will be adding buttons>" ));

        panel1.add(panel2, BorderLayout.WEST);
        panel1.add(panel3, BorderLayout.CENTER);
        panel1.add(panel4, BorderLayout.SOUTH);

        panel2.setBorder(BorderFactory.createRaisedBevelBorder());
        panel3.setBorder(BorderFactory.createRaisedBevelBorder());      
        panel4.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

        frame.add(panel1); 
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setSize(510,390);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setResizable(false);
    }
}

3 回答

  • 6

    要删除WEST和CENTER之间的边框,只需删除它们的边框即可

    panel2.setBorder(BorderFactory.createRaisedBevelBorder());
    panel3.setBorder(BorderFactory.createRaisedBevelBorder());
    

    如果要保留框架边缘的边框,请将边框添加到 panel1 .

    对于SOUTH,如果你想“在南边界顶部添加一条线”并保留空边框,请使用:

    panel4.setBorder(BorderFactory.createCompoundBorder(
           BorderFactory.createEmptyBorder(10, 10, 10, 10),
           BorderFactory.createMatteBorder(2, 0, 0, 0, Color.BLACK)));
    

    createRaisedBevelBorder() 而不是 createMatteBorder .

    请记住,您可以切换边框的顺序和样式 . 有关详细信息,请参阅tutorial .

    Inner: matte, outer: empty

    Inner: empty, outer: matte

  • 1

    试试这个:

    import java.awt.BorderLayout;
    import java.awt.FlowLayout;
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class test {
        public static void main(String[] args) { 
    
            JPanel panel1 = new JPanel(new BorderLayout());
            JPanel panel2 = new JPanel(new BorderLayout());
            JPanel panel3 = new JPanel(new FlowLayout());
            JPanel panel4 = new JPanel(new FlowLayout());
            JPanel panel5 = new JPanel(new FlowLayout());
    
            JFrame frame = new JFrame();
    
            panel4.add( new JLabel( "WEST <will be adding image here>" ));
            panel5.add( new JLabel( "CENTER <contents>"));  
            panel3.add( new JLabel( "SOUTH <will be adding buttons>" ));
    
            panel1.add(panel2, BorderLayout.CENTER);
            panel1.add(panel3, BorderLayout.SOUTH);
            panel2.add(panel4, BorderLayout.WEST);
            panel2.add(panel5, BorderLayout.CENTER);
    
            panel2.setBorder(BorderFactory.createRaisedBevelBorder());     
            panel3.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
    
            frame.add(panel1); 
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.pack();
            frame.setSize(510,390);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            frame.setResizable(false);
        }
    }
    
  • 3

    enter image description here

    `以下代码将组件添加到框架的内容窗格中 . 由于内容窗格默认使用BorderLayout类,因此代码不需要设置布局管理器 . 完整的程序位于BorderLayoutDemo.java文件中 .

    ...//Container pane = aFrame.getContentPane()...
    JButton button = new JButton("Button 1 (PAGE_START)");
    pane.add(button, BorderLayout.PAGE_START);
    
    //Make the center component big, since that's the 
    //typical usage of BorderLayout.
    button = new JButton("Button 2 (CENTER)");
    button.setPreferredSize(new Dimension(200, 100));
    pane.add(button, BorderLayout.CENTER);
    
    button = new JButton("Button 3 (LINE_START)");
    pane.add(button, BorderLayout.LINE_START);
    
    button = new JButton("Long-Named Button 4 (PAGE_END)");
    pane.add(button, BorderLayout.PAGE_END);
    
    button = new JButton("5 (LINE_END)");
    pane.add(button, BorderLayout.LINE_END);
    
    Specify the component's location (for example, BorderLayout.LINE_END) as one of the arguments to the add method. If this component is missing from a container controlled by a BorderLayout object, make sure that the component's location was specified and no another component was placed in the same location.
    
    All tutorial examples that use the BorderLayout class specify the component as the first argument to the add method. For example:
    
    add(component, BorderLayout.CENTER)  //preferred
    However, the code in other programs specifies the component as the second  argument. For example, here are alternate ways of writing the preceding code:
    
    add(BorderLayout.CENTER, component)  //valid but old fashioned
         or
    add("Center", component)             //valid but error prone
    

相关问题