2009-12-24 8 views
0

Я застрял в том, как изменить размер третьей кнопки до того же размера, что и два других, и поместить ее на дно.Невозможно изменить размер JButton

class ControlFrame extends JFrame 
    implements Runnable 
{ 
    JButton jb_inc = new JButton(); 
    JButton jb_zero = new JButton(); 
    JButton jb_dec = new JButton(); 

    ControlFrame() { 
     super("Control Frame"); 
     this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    } 

    ControlFrame(int x,int y, int w, int h) { 
     this(); 
     this.setBounds(x, y, w, h); 
     this.setVisible(true); 

     jb_inc.setBounds(10,10,90,20); 
     jb_zero.setBounds(10,40,90,20); 
     jb_dec.setBounds(10,60,90,20); 

     jb_inc.setVisible(true); 
     jb_zero.setVisible(true); 
     jb_dec.setVisible(true); 

     this.getContentPane().add(jb_inc); 
     this.getContentPane().add(jb_zero); 
     this.getContentPane().add(jb_dec); 

    } 

    public void run() { 
    } 
} 

public class Counting_Machine 
{ 
    public static void main(String[] args) { 
     ControlFrame cf = new ControlFrame(0,200,80,150); 
    } 
} 

ответ

0

Два предложения:

1) ставить общие вещи в блок инициализации экземпляра. Лично я содрогаюсь всякий раз, когда вижу вызов «this()».

{ это.setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE); }

ControlFrame() { super ("Control Frame"); }

ControlFrame (целое х, у INT, Int W, Int ч) { супер ("кадр управления"); ... }

2) Я бы избавиться от х, у, ш, ч конструктору ... лично у меня есть класс, называемый WindowUtils, что имеет метод «позицию», которая выясняет размер экрана и затем использует значения, переданные для создания окна, которое является относительным размером экрана. Тогда код, который создает окно, вызывает это. Я предпочитаю иметь как можно меньше конструкторов (очень часто это нулевой или один, у меня почти нет двух или более).

3) this.getContentPane(). Add (jb_inc); теперь можно записать как add (jb_inc); - С тех пор JDK 1.5 думаю.

4) никогда не вызывайте переопределяемые методы (все, что у вас есть это раньше) внутри конструктора. Если подкласс должен был переопределить «добавить», вы могли бы увидеть, как все ломается. Таким образом, вы можете вызвать super.add(), или сделать добавления в другом методе, или сделать свой класс окончательным.

Теперь, чтобы ответить на ваш вопрос ... :-)

Вы должны использовать LayoutManagers, чтобы получить то, что вы хотите.

В зависимости от того, что вы хотите, вы, вероятно, захотите использовать BorderLayout, чтобы вы могли получить кнопку внизу.

2

Я предлагаю вам начать с чтением раздела из свинга учебника по Using Layout Managers Вашему коду не будет работать, потому что вы пытаетесь добавить 3 компонент в «центр» в BorderLayout, который не будет работать. Выберите LayoutManager, который лучше соответствует вашим потребностям.

При использовании диспетчера макетов нет необходимости использовать метод setBounds (...). Работа менеджера макетов заключается в размещении компонентов на основе правил менеджера макета. Предпочтительный размер каждой кнопки должен быть таким же, поскольку вы не добавили текст в кнопки.

Кроме того, нет необходимости вызывать setVisible() на кнопках, все компоненты Swing видны по умолчанию, кроме контейнеров верхнего уровня (JFrame, JDialog).

0

Поскольку вы настраиваете границы на все, вам совсем не нужен LayoutManager. Установите для параметра LayoutManager значение null, после чего вы можете разместить все самостоятельно, как и в вашем примере.

this.setLayoutManager(null) 
+0

Это решает проблему, которую задает оригинальный плакат, но, за исключением нескольких случаев, использование макета «null» просто вводит новые проблемы. – Nate