2015-05-06 5 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

Чтобы удалить границу между Западным и CENTER, просто удалите их границы

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 
Смежные вопросы