2013-02-19 3 views
0

Я пытаюсь выровнять JLabel и JScrollPane (содержащий JTextArea) слева от JPanel. Когда я помещаю JTextArea прямо в панель, выравнивание правильное. Выравнивание неверно, если JTextArea находится в панели прокрутки.Выравнивание JLabel с помощью JScrollPane в BoxLayout

import javax.swing.BoxLayout; 
import javax.swing.JDialog; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 

public class Main { 

    public static void main(String[] args) { 
     JDialog dialog = new JDialog(); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); 
     panel.add(new JLabel("My Label")); 
     // panel.add(new JTextArea(3, 15)); 
     panel.add(new JScrollPane(new JTextArea(3, 15))); 
     dialog.add(panel); 
     dialog.pack(); 
     dialog.setVisible(true); 
    } 
} 

Первое изображение ниже со областью прокрутки, а второе изображение без него. Как правильно выровнять панель прокрутки?

Unaligned dialogAligned dialog

ответ

2

Попробуйте использовать alignmentX:

import java.awt.Component; 

import javax.swing.*; 

public class Main { 

    public static void main(String[] args) { 
     JDialog dialog = new JDialog(); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 

     JLabel label = new JLabel("My Label"); 
     label.setAlignmentX(Component.LEFT_ALIGNMENT); 
     panel.add(label); 

     JScrollPane pane = new JScrollPane(new JTextArea(3, 15)); 
     pane.setAlignmentX(Component.LEFT_ALIGNMENT); 
     panel.add(pane); 

     dialog.add(panel); 
     dialog.pack(); 
     dialog.setVisible(true); 
    } 
} 
1

Заменить:

panel.add(new JLabel("My Label")); 

By:

JPanel labelPan = new JPanel(new FlowLayout(FlowLayout.LEFT); 
labelPan.add(new JLabel("My Label")); 
panel.add(labelPan);