2016-12-05 4 views
0

Я хотел бы сделать дизайн, как в следующем,Как установить смещения между JPanels и JFrame?

enter image description here

Я пытаюсь поставить offesets между JPanel, и JFrame и я получаю что-то похожее на это, enter image description here

У меня есть код как следующий, где я из 2 JPanels внутри JFrame.

private static void createAndShowGUI() { 

     JFrame frame = new JFrame("My App"); 

     GridLayout myLayout = new GridLayout(1,2); 
     myLayout.setHgap(10); 

     frame.setLayout(myLayout); 

     JPanel jLeftPanel = new JPanel(); 
     JPanel jRightPanel = new JPanel(); 

     jLeftPanel.setBackground(Color.DARK_GRAY); 
     jLeftPanel.setSize(275, 250); 

     jRightPanel.setBackground(Color.DARK_GRAY); 
     jRightPanel.setSize(275, 250); 

     frame.add(jLeftPanel); 
     frame.add(jRightPanel); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

//  frame.pack(); 
     frame.setSize(600, 550); 
     frame.setVisible(true); 
    } 

Как улучшить дизайн?

ответ

0

JComponent может иметь границу. Существует BorderFactory, который может создавать соответствующие границы. Например:

int top=10; 
int left=10; 
int bottom=10; 
int right=10; 
jLeftPanel.setBorder(BorderFactory.createEmptyBorder(top,left,bottom,right)); 

Это создаст пустую (то есть непрозрачную) границу. Вы могли бы иметь границу с определенным цветом, тоже:

int thickness=10;  
jLeftPanel.setBorder(BorderFactory.createLineBorder(Color.GRAY,thickness)); 

Проверьте другие BorderFactory.create ... методы, и если вам нужно что-нибудь более сложное, вы можете создавать свои собственные реализации интерфейса javax.swing.border.Border.

+0

Большое спасибо за ваш ответ, это работает. Как положить кнопку в нижней правой части левой панели, которая будет принимать 2 параметра (ширина и высота) и нарисовать фигуру на правой панели? Я борюсь за это в течение последних 3 часов, небольшая помощь оценивается. – Chak

+0

Извините за поздний ответ. Я бы использовал BorderLayout для левой панели, затем добавлю две внутренние панели, панель GridLayout в центре для текстовых полей ввода и панель FlowLayout на юге для кнопки (FlowLayout может выровнять по правому краю). Справа я бы подклассифицировал JPanel и сам рисовал фигуру в переопределенном методе JComponent.paintComponent(). Кроме того, у Oracle есть [руководство по компонентам, окрашенным по индивидуальному заказу] (https://docs.oracle.com/javase/tutorial/uiswing/painting/). –

+0

Кроме того, если вы хотите создать сложные макеты, обратите внимание, что встроенные менеджеры макетов для AWT/Swing очень ограничены и утомительны для использования в более широком масштабе. Я рекомендую посмотреть на сторонних менеджеров макетов, в частности [JGoodies FormLayout] (http://www.jgoodies.com/freeware/libraries/forms/). –