2016-12-05 67 views
0

無論我如何爲JLabel設置邊界,它總是處於同一個位置。我正在使用Window Builder Swing Designer應用程序窗口。這裏是我的代碼:無法將JPanel中的JLabel組件對齊到它所在的JPanel左側

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.LineBorder; 
import java.awt.Color; 
import javax.swing.JLabel; 
import java.awt.Font; 
import javax.swing.SwingConstants; 

public class Restaurants { 

private JFrame frame; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Restaurants window = new Restaurants(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
    public Restaurants() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(0, 0, 1368, 689); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JPanel panel = new JPanel(); 
    panel.setBorder(new LineBorder(new Color(0, 0, 0), 12)); 
    panel.setBounds(10, 143, 572, 258); 
    frame.getContentPane().add(panel); 

    JLabel label= new JLabel("Chicken Burger Meal"); 
    label.setFont(new Font("Tahoma", Font.PLAIN, 18)); 
    label.setBounds(21,70,173,29); 
    panel.add(label); 

    JLabel lblChickenBurger = new JLabel("Chicken Burger"); 
    lblChickenBurger.setFont(new Font("Tahoma", Font.PLAIN, 18)); 
    lblChickenBurger.setBounds(21,22,173,29); 
    panel.add(lblChickenBurger); 

    JPanel panel_1 = new JPanel(); 
    panel_1.setBorder(new LineBorder(new Color(0, 0, 0), 12)); 
    panel_1.setBounds(592, 143, 401, 259); 
    frame.getContentPane().add(panel_1); 

    JPanel panel_2=new JPanel(); 
    panel_2.setBorder(new LineBorder(new Color(0,0,0), 12)); 
    panel_2.setBounds(10,412,572,228); 
    frame.getContentPane().add(panel_2); 

    JPanel panel_3=new JPanel(); 
    panel_3.setBorder(new LineBorder(new Color(0,0,0),12)); 
    panel_3.setBounds(592,411,401,228); 
    frame.getContentPane().add(panel_3); 

    JPanel panel_4 = new JPanel(); 
    panel_4.setBorder(new LineBorder(new Color(0, 0, 0), 12)); 
    panel_4.setBounds(1003, 174, 401, 465); 
    frame.getContentPane().add(panel_4); 

    JLabel lblNewLabel = new JLabel("Loan Management System"); 
    lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 60)); 
    lblNewLabel.setBounds(160, 49, 849, 96); 
    frame.getContentPane().add(lblNewLabel); 
} 

}

你覺得有什麼不對?我已經整理了所有我能想到的可能的策略,但沒有一種策略似乎產生了任何可行的解決方案。

回答

0

最簡單,最適宜的方式是不使用絕對定位 - 使用適當的佈局管理器(一個或多個)。試圖使用絕對定位的問題充滿了問題,特別是如果您移植到具有不同屏幕尺寸,像素尺寸或默認字體或任何其他幾十種不同平臺的平臺。而改變字體或標籤字符串,或添加/刪除組件,將是一場噩夢。

JPanel itsepf不關注組件的(x,y)的大小 - 它依賴於佈局管理器來執行此操作。

如果你堅持要用空佈局來做,你將不得不用null佈局管理器創建你自己的JPanel子類,並在paintComponent()方法中自己放置組件(或者,你自己的LayoutManager編寫做這個)。