2014-11-24 80 views
4

我想在JFrame內設置jLabeldimension(50,75)設置jLabel在鞦韆上的尺寸

我嘗試使用

label.setPreferredSize(new Dimension(50, 75)); 

但它不工作。 我該怎麼做?

+3

什麼'LayoutManager'您使用?發佈[MCVE](http://stackoverflow.com/help/mcve)。 – alex2410 2014-11-24 10:48:53

+0

通過使用字體大小更容易。 – kr4k3rz 2016-12-16 11:42:08

回答

3

setPreferredSize變化真標籤的大小,你應該嘗試繪製邊框採用setBorder方法來驗證新的大小,但字體大小沒有改變,如果你想擁有大字體嘗試調用setFont和設置新的字體大小,在這裏一些代碼開始:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.Font; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.border.LineBorder; 

public class Test { 
    public static void main(String[] args) { 
     JFrame t = new JFrame(); 
     t.setBounds(100, 100, 500, 400); 
     JLabel l = new JLabel("Hello"); 
     // new font size is 20 
     l.setFont(new Font(l.getFont().getName(), l.getFont().getStyle(), 20)); 
     // draw label border to verify the new label size 
     l.setBorder(new LineBorder(Color.BLACK)); 
     // change label size 
     l.setPreferredSize(new Dimension(200, 200)); 
     t.getContentPane().setLayout(new FlowLayout()); 
     t.add(l); 
     t.setVisible(true); 
    } 
} 
+0

@ddk否標籤尺寸是(200,200),它是具有尺寸(500,400)的框架,setPreferredSize(新尺寸(200,200))方法更改尺寸標籤,但它取決於使用的佈局,您應該在包含標籤的面板上使用'FlowLayout',如果你讓默認的BorderLayout佈局的標籤尺寸與框架相同,可以使用'getContentPane()。setLayout(new FlowLayout())'。 – 2014-11-24 11:08:13

+0

它工作... !!! – ddk 2014-11-24 11:10:28

+0

@ddk我很高興它'爲你工作。 – 2014-11-24 11:11:08

-1

使用的JLabel setBounds(x, y, width, height)方法

移動並重置該組件。左上角的新位置由x和y指定,新尺寸由寬度和高度指定。

+2

'null''LayoutManager'是個壞主意。 – alex2410 2014-11-24 10:49:31

+0

Java GUI必須適用於不同的操作系統,屏幕尺寸,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。我們需要的最後一件事就是更糟糕的建議。 -1 – 2014-11-24 11:17:25

-1

你必須使用一個LayoutManager,然後你必須調用pack方法。

LayoutManager嘗試排列子組件,pack()獲取這些子組件的首選大小。

公共無效包()

此窗口的大小,以適合其子組件的優選尺寸和佈局。如果任何一個維度小於先前對setMinimumSize方法的調用所指定的最小大小,則窗口的結果寬度和高度會自動放大。如果窗口和/或其所有者尚不可顯示,則在計算首選大小之前,它們都是可顯示的。該窗口在計算大小後進行驗證。

+1

你爲什麼認爲'pack()'在這裏有幫助?大小取決於'LayoutManager'.爲了解決這個問題,OP必須發佈'MCVE'。 – alex2410 2014-11-24 10:53:07

0

簡單的例子:

class Testing extends JFrame 
{ 
    int counter = 1; 
    javax.swing.Timer timer; 
    public Testing() 
    { 
    setSize(100,50); 
    setLocation(300,100); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    JPanel p = new JPanel(); 
    final JLabel label = new JLabel("1",JLabel.CENTER); 
    label.setBorder(BorderFactory.createLineBorder(Color.BLACK)); 
    Dimension d = label.getPreferredSize(); 
    //label.setPreferredSize(new Dimension(d.width+60,d.height));//<----------- 
    p.add(label); 
    getContentPane().add(p); 
    ActionListener al = new ActionListener(){ 
     public void actionPerformed(ActionEvent ae){ 
     counter *= 10; 
     label.setText(""+counter); 
     if(counter > 1000000) timer.stop();}}; 
    timer = new javax.swing.Timer(1000,al); 
    timer.start(); 
    } 
+0

請閱讀alex2410對OP的評論 – mKorbel 2014-11-24 11:01:11