在swing中设置JLabel的大小

5

我希望在一个JFrame中设置一个大小为dimension(50,75)jLabel

我尝试使用以下代码:

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

但它没有起作用。 我该怎么做?


3
你使用什么LayoutManager?发布一个MCVE - alex2410
通过使用字体大小,更容易阅读。 - Kshitiz Mishra
4个回答

5

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(new Dimension(200, 200))方法可以更改标签的大小,但这取决于所使用的布局。您应该在包含标签的面板上使用getContentPane().setLayout(new FlowLayout())来使用FlowLayout。如果您使用默认布局BorderLayout,则标签的大小将与框架相同。 - Naruto Biju Mode

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();  
  }  

-1
使用JLabel的setBounds(x, y, width, height)方法。
移动并调整此组件的大小。左上角新位置由x和y指定,新大小由width和height指定。

2
"null" "LayoutManager" 不是一个好主意。 - alex2410
Java GUI必须在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不适合像素完美布局。相反,使用布局管理器或它们的组合(参见https://dev59.com/pG035IYBdhLWcg3wGMHa#5630271),以及布局填充和边框来创建空白区域(参见https://dev59.com/3GMm5IYBdhLWcg3wG7_A#17874718)。我们最不需要的是这样的错误建议。-1 - Andrew Thompson

-1

你需要使用 LayoutManager,然后调用 pack 方法。

LayoutManager 会尝试安排子组件的布局,pack() 方法获取这些子组件的首选大小。

public void pack()

使此窗口大小适合其子组件的首选大小和布局。如果窗口的任一维度小于先前调用 setMinimumSize 方法设置的最小大小,则自动扩大窗口的宽度和高度。如果窗口及/或其所有者尚未可显示,则在计算首选大小之前使它们都可显示。计算完首选大小后,对窗口进行验证。


1
你认为为什么pack()在这里有帮助?大小取决于LayoutManager。为了解决这个问题,OP必须发布MCVE - alex2410

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接