Я пытался работать со свингом (впервые) несколько недель назад и немного рискнул сам, чтобы лучше почувствовать его. Кажется, у меня проблема с вертикальным выравниванием.
Вот ситуация: у меня есть JPanel boxlayout (Y_AXiS) в западной части границы. Внутри JPanel w / boxlayout у меня есть два других JPanel, которые я хочу выровнять по вертикали (подталкивать к верхней части экрана независимо от размеров рамки). Тем не менее, менеджер по расположению, кажется, помещает большое вертикальное пространство между двумя JPanels. Я думал, что, возможно, сетка лучше подойдет для этого, но я не уверен. Я много раз пытался найти ответ в Google и исправить проблему, но безуспешно. Помогите пожалуйста!
package com.granet;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
public class CustomerOrganizer extends JFrame
{
public CustomerOrganizer()
{
JPanel topPanel = new JPanel();
topPanel.setBackground(Color.darkGray);
JLabel customerSlogan = new JLabel("Customer Organizer");
topPanel.add(customerSlogan);
JPanel leftPanel = new JPanel();
leftPanel.setBackground(Color.darkGray);
leftPanel.setBorder(new EmptyBorder(10,100,00,0));
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
DrawPanel firstTab = new DrawPanel(Color.white, 350, 50);
DrawPanel secondTab = new DrawPanel(Color.white, 350, 50);
JLabel firstTabText = new JLabel("First Tab");
JLabel secondTabText = new JLabel("Second Tab");
firstTab.setBorder(new EmptyBorder(0,60,60,0));
secondTab.setBorder(new EmptyBorder(0,60,60,0));
firstTab.add(firstTabText);
secondTab.add(secondTabText);
leftPanel.add(firstTab);
leftPanel.add(secondTab);
firstTab.setAlignmentX(Component.LEFT_ALIGNMENT);
secondTab.setAlignmentX(Component.LEFT_ALIGNMENT);
/* DOESN'T WORK, I'm pretty sure this changes the point on the jpanel which used for alignment (top, bottom, left or right)
firstTab.setAlignmentY(Component.TOP_ALIGNMENT);
secondTab.setAlignmentY(Component.TOP_ALIGNMENT);
*/
add(topPanel, BorderLayout.NORTH);
add(leftPanel, BorderLayout.WEST);
pack();
}
public static void main(String[] args)
{
CustomerOrganizer frame = new CustomerOrganizer();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(700,400);
frame.setVisible(true);
}
}
DrawPanel.java
package com.granet;
import javax.swing.*;
import java.awt.*;
public class DrawPanel extends JPanel
{
Color color;
int width;
int height;
public DrawPanel(Color color, int width, int height)
{
this.color=color;
this.width=width;
this.height=height;
}
public DrawPanel()
{
this.color = Color.darkGray;
this.width=this.getWidth();
this.height=this.getHeight();
}
public void paintComponent(Graphics g)
{
g.setColor(color);
g.fillRect(0, 0, width, height);
}
}
и вот что я вижу при запуске:
http://concertforhope.net/citeforme/javabug.png
Обратите внимание, что нижняя вкладка не прижата к верхней вкладке.
NVM, я понимаю почему. Вкладки были не такими маленькими, я заполнял фон неправильно (белые прямоугольники не отображали реальные вкладки). Спасибо за помощь.