[JavaSwing] Sự khác nhau giữa LEFT và LEADING, RIGHT và TRAILING
[JavaSwing] Sự khác nhau giữa LEFT và LEADING, RIGHT và TRAILING Tháng Hai 26, 2014 nguyenvanquan7826 TUT Java swing Leave a response Như các bạn đã biết về cách căn chỉnh lề của các đối tượng trong một Layout, cụ thể là ở bài ...
[JavaSwing] Sự khác nhau giữa LEFT và LEADING, RIGHT và TRAILING
Như các bạn đã biết về cách căn chỉnh lề của các đối tượng trong một Layout, cụ thể là ở bài FlowLayout đã đề cập đến nó. Khi mới sử dụng nhiều bạn sẽ không phân biệt được sự khác nhau giữa LEFT và LEADING, RIGHT và TRAILING. Trong bài viết này chúng ta sẽ tìm hiểu điều đó.
Mặc các đối tượng của chúng ta được sắp xếp trong Container (ComponentOrientation) là left-to-right/top-to-bottom, với FlowLayout thì đó là left-to-right. Chúng ta sẽ xem xét 2 Ví dụ sau đây:
Khi ComponentOrientation là left-to-right
Ví dụ sau sẽ tạo ra 1 JPanel (main panel) chứa 5 JPanel (item panel), mỗi item panel này sẽ được đặt FLowLayout với cách căn lề khác nhau và chứa một JLabel (có text và icon) để thể hiện được sự căn lề của chúng.
package Align; import java.awt.ComponentOrientation; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class MyOrientation extends JFrame { public MyOrientation() { createJFrame(); } private void createJFrame() { setTitle("Orientation left to right"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); // add content to JFrame add(createMainPanel()); setLocationRelativeTo(null); setVisible(true); } private JPanel createMainPanel() { // create main panel JPanel panel = new JPanel(new GridLayout(5, 1, 5, 5)); // add panels item with align panel.add(cereateItemPanel(FlowLayout.LEFT, "LEFT")); panel.add(cereateItemPanel(FlowLayout.CENTER, "CENTER")); panel.add(cereateItemPanel(FlowLayout.RIGHT, "RIGHT")); panel.add(cereateItemPanel(FlowLayout.LEADING, "LEADING")); panel.add(cereateItemPanel(FlowLayout.TRAILING, "TRAILING")); return panel; } // create JPanel with align and JLabel title private JPanel cereateItemPanel(int align, String title) { // create JPanel JPanel panel = new JPanel(createFlowLayout(align)); // set Component Orientation panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); // add JLabel panel.add(createJLabel(title)); return panel; } // create FlowLayout with align private FlowLayout createFlowLayout(int algin) { FlowLayout layout = new FlowLayout(); layout.setAlignment(algin); return layout; } // create JLabel with title and icon private JLabel createJLabel(String title) { JLabel lb = new JLabel(title); // get icon for JLabel Icon icon = new ImageIcon(getClass().getResource("7826.png")); lb.setIcon(icon); // set location for text label lb.setHorizontalTextPosition(JLabel.CENTER); lb.setVerticalTextPosition(JLabel.BOTTOM); return lb; } public static void main(String[] args) { new MyOrientation(); } }
Ta có được hình thứ nhất. Các bạn có thể thấy chúng ta vẫn chưa nhận được một lời giải thích cho vấn đề đặt ra vì căn lề theo LEFT hoàn toàn giống với LEADING, RIGHT chẳng khác gì TRAILING. Tuy nhiên đây mới chỉ là bước đầu thôi, bạn hãy thay đổi cách bố trí của JPanel bằng phương thức setComponentOrientation thành RIGHT_TO_LEFT ta sẽ có được như hình thứ hai và câu trả lời được hé lộ.
Ta có thể hiểu là LEFT và RIGHT là cách căn lề đúng theo lề trái, phải một cách tuyệt đối, còn LEADING và TRAILING là cách đặt lề trái, phải một cách tương đối dựa vào cách đặt lề của Container chứa nó. Khi Container chứa nó có cách sắp xếp (Orientation) là LEFT_TO_RIGHT thì LEADING là bên trái, TRAILING là bên phải, còn khi Orientation là RIGHT_TO_LEFT thì LEADING lại là bên phải, TRAILING là bên trái.