2014-11-24 3 views
4

Я хочу установить jLabel с dimension(50,75) внутри JFrame.Установленный размер для jLabel в качелях

Я попытался с помощью

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

Но он не работает. Как я могу это сделать?

+3

Что 'LayoutManager' вы используете? Опубликовать [MCVE] (http://stackoverflow.com/help/mcve). – alex2410

+0

с помощью этого размера. – kr4k3rz

ответ

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' на панели, которая содержит ваш ярлык, используя' getContentPane(). setLayout (new FlowLayout()) ', если вы разрешаете свой макет по умолчанию, который является' BorderLayout', размер метки будет таким же, как у фрейма. –

+0

это сработало ... !!! – ddk

+0

@ddk Я рад, что он «работает на вас. –

-1

Применение JLabel setBounds(x, y, width, height) метод

перемещение и изменение размера этого компонента. Новое расположение верхнего левого угла определяется x и y, а новый размер определяется шириной и высотой.

+2

'null'' LayoutManager' - плохая идея. – alex2410

+0

Java GUI должны работать с различными ОС, размером экрана, разрешением экрана и т. Д. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). Последнее, что нам нужно, - это более плохие советы. -1 –

-1

вы должны использовать LayoutManager, а затем вы должны вызвать метод обновления.

LayoutManager пытается организовать подкомпоненты, а pack() получает предпочтительные размеры этих подкомпонентов.

общественный недействительный пакет()

Причины этого окно, чтобы иметь размеры, чтобы соответствовать нужному размеру и макеты свернут. Полученная ширина и высота окна автоматически увеличиваются, если любой из размеров меньше минимального размера, указанного предыдущим вызовом методу setMinimumSize. Если окно и/или его владелец еще не отображаются, оба они становятся отображаемыми перед вычислением предпочтительного размера. Окно проверяется после вычисления его размера.

+1

Почему вы думаете, что 'pack()' помогает здесь? Размер зависит от 'LayoutManager'. Для решения этой проблемы OP должен отправить сообщение' MCVE'. – alex2410

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

Смежные вопросы