2015-05-06 176 views
3

我不是很擅长Java GUI,需要寻求帮助。BorderLayout显示边框线

我打算在我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); 
    } 
} 

回答

6

要删除西部和中心之间的边界,只是删除其边界

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

如果要保留边框与边框的边框,请改为将边框添加到panel1

作为南,如果你想“添加一条线穿过,南边界之上”,并保持空边框,使用:

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

3

试试这个:

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

在我看来你的回答是最好的:) –

1

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