【问题标题】:BorderLayout showing border linesBorderLayout 显示边框线
【发布时间】:2015-05-06 13:43:31
【问题描述】:

我的 Java GUI 不是很好,需要寻求帮助。

我打算在我的BorderLayout 的西边添加图片,中心是我的内容和底部的按钮。

我创建了一个空白边框,以便在我的南面板与我的西面板和中心面板之间进行一些填充。现在我只想在南边界的顶部添加一条线。

如下图所示,西面板和中面板之间也有一条线,我怎样才能删除那条线并保持这条线穿过南面板顶部?

附上我的代码:

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);
    }
}

【问题讨论】:

    标签: java swing border border-layout


    【解决方案1】:

    要删除 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 了解更多信息。

    【讨论】:

      【解决方案2】:

      试试这个:

      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】:


      `以下代码将组件添加到框架的内容窗格。 因为内容窗格默认使用 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
      

      【讨论】:

        猜你喜欢
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 2012-01-19
        • 1970-01-01
        相关资源
        最近更新 更多