我想在JFrame
內設置jLabel
與dimension(50,75)
。設置jLabel在鞦韆上的尺寸
我嘗試使用
label.setPreferredSize(new Dimension(50, 75));
但它不工作。 我該怎麼做?
我想在JFrame
內設置jLabel
與dimension(50,75)
。設置jLabel在鞦韆上的尺寸
我嘗試使用
label.setPreferredSize(new Dimension(50, 75));
但它不工作。 我該怎麼做?
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);
}
}
@ddk否標籤尺寸是(200,200),它是具有尺寸(500,400)的框架,setPreferredSize(新尺寸(200,200))方法更改尺寸標籤,但它取決於使用的佈局,您應該在包含標籤的面板上使用'FlowLayout',如果你讓默認的BorderLayout佈局的標籤尺寸與框架相同,可以使用'getContentPane()。setLayout(new FlowLayout())'。 – 2014-11-24 11:08:13
它工作... !!! – ddk 2014-11-24 11:10:28
@ddk我很高興它'爲你工作。 – 2014-11-24 11:11:08
使用的JLabel setBounds(x, y, width, height)
方法
移動並重置該組件。左上角的新位置由x和y指定,新尺寸由寬度和高度指定。
'null''LayoutManager'是個壞主意。 – alex2410 2014-11-24 10:49:31
Java GUI必須適用於不同的操作系統,屏幕尺寸,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。我們需要的最後一件事就是更糟糕的建議。 -1 – 2014-11-24 11:17:25
你必須使用一個LayoutManager,然後你必須調用pack方法。
LayoutManager嘗試排列子組件,pack()獲取這些子組件的首選大小。
公共無效包()
此窗口的大小,以適合其子組件的優選尺寸和佈局。如果任何一個維度小於先前對setMinimumSize方法的調用所指定的最小大小,則窗口的結果寬度和高度會自動放大。如果窗口和/或其所有者尚不可顯示,則在計算首選大小之前,它們都是可顯示的。該窗口在計算大小後進行驗證。
你爲什麼認爲'pack()'在這裏有幫助?大小取決於'LayoutManager'.爲了解決這個問題,OP必須發佈'MCVE'。 – alex2410 2014-11-24 10:53:07
簡單的例子:
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();
}
請閱讀alex2410對OP的評論 – mKorbel 2014-11-24 11:01:11
什麼'LayoutManager'您使用?發佈[MCVE](http://stackoverflow.com/help/mcve)。 – alex2410 2014-11-24 10:48:53
通過使用字體大小更容易。 – kr4k3rz 2016-12-16 11:42:08