2015-08-25 3 views
0

Я попытался использовать setSize(), но не работал. то я также использовал setPreferredSize (новое измерение (x, y)). Да, он работает, но он изменяет размер всех компонентов в этой панели (oPanel). Я просто хочу изменить размер btnPlus.Как установить размер какой-либо конкретной компоненты JButton (в данном случае btnPlus)?

import javax.swing.*; 
import java.awt.event.*; 
import java.awt.*; 

public class MyCalc { 

public static void main(String[] args) { 

    JFrame main= new JFrame(); 
    JPanel bPanel= new JPanel(); 
    JPanel oPanel= new JPanel(); 
    JPanel Txt= new JPanel(); 
    JPanel Panel=new JPanel(); 
    JButton btn0= new JButton("0"); 
    JButton btn1= new JButton("1"); 
    JButton btn2= new JButton("2"); 
    JButton btn3= new JButton("3"); 
    JButton btn4= new JButton("4"); 
    JButton btn5= new JButton("5"); 
    JButton btn6= new JButton("6"); 
    JButton btn7= new JButton("7"); 
    JButton btn8= new JButton("8"); 
    JButton btn9= new JButton("9"); 
    JButton btnDot= new JButton("."); 
    JButton btnPlus= new JButton("+"); 
    JButton btnMinus= new JButton("-"); 
    JButton btnEquals= new JButton("="); 
    //JTextField tf= new JTextField(); 
    JTextArea ta= new JTextArea(); 

    ta.setColumns(20); 
    ta.setRows(3); 
    //ta.setViewPortView() 

    main.setLayout(new BorderLayout(20,20)); 

    Txt.setLayout(new BorderLayout()); 
    //Txt.add(tf,BorderLayout.NORTH); 
    Txt.add(ta,BorderLayout.SOUTH); 

    bPanel.setLayout(new GridLayout(4,3,5,5)); 
    bPanel.add(btn0); 
    bPanel.add(btn1); 
    bPanel.add(btn2); 
    bPanel.add(btn3); 
    bPanel.add(btn4); 
    bPanel.add(btn5); 
    bPanel.add(btn6); 
    bPanel.add(btn7); 
    bPanel.add(btn8); 
    bPanel.add(btn9); 
    bPanel.add(btnDot); 

    oPanel.setLayout(new GridLayout(3,1,5,5)); 
    //oPanel.setMaximumSize(new Dimension(400,400)); 
    oPanel.add(btnPlus); 
    oPanel.add(btnMinus); 
    oPanel.add(btnEquals); 

    btnPlus.setPreferredSize(new Dimension(50,100)); 
    btnMinus.setPreferredSize(new Dimension(25,25)); 
    btnPlus.setPreferredSize(new Dimension(50,100)); 

    Panel.setLayout(new FlowLayout()); 
    Panel.add(bPanel); 
    Panel.add(oPanel); 

    //main.getContentPane().add(bPanel,BorderLayout.LINE_START); 
    //main.getContentPane().add(oPanel, BorderLayout.LINE_END); 
    main.getContentPane().add(Panel,BorderLayout.CENTER); 
    main.getContentPane().add(Txt, BorderLayout.PAGE_START); 

    main.setSize(300, 300); 
    main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    main.setVisible(true); 
} 

} 
+0

* «Как я могу установить размер какой-то конкретный компонент JButton (в данном случае btnPlus)?» * Лучше не , Вместо этого дайте ему значок, размер шрифта и маржу, чтобы предложить размер. –

ответ

3

Я думаю, что ваша основная проблема заключается в использовании GridLayout, что дает равное пространство для всех компонентов в контейнере на основе конфигурации вы даете ему и размер контейнера.

Рассмотрим вместо этого, используя GridBagLayout, что даст вам гораздо больше контроля.

См. How to Use GridLayout и How to Use GridBagLayout для получения более подробной информации.

Вы должны также взглянуть на Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? и да, вы должны избегать его

+1

См. Также этот вложенный макет [пример] (http://stackoverflow.com/a/3420431/230513). – trashgod