2014-01-03 2 views
0

Я новичок в программировании, и в настоящее время я придерживаюсь незначительной проблемы. Я сам посмотрел, как создать кнопку, как использовать все методы, а что нет, но меня путают, как на самом деле заставить кнопку появляться на экране. Это может быть что-то очень простое, что я просто не понимаю. Но может кто-нибудь мне помочь? Я создал 3 кнопки. `Как получить кнопку для фактического отображения на экране?

Button balance = new Button("Check Balance"); 
Button deposit = new Button("Deposit"); 
Button withdraw = new Button("Withdraw"); 

System.out.println("1. " + balance.getLabel()); 
System.out.println("2. " + deposit.getLabel()); 
System.out.println("3. " + withdraw.getLabel()); 
System.out.print("What would you like to do? "); 

Я просто путаюсь, как заставить кнопку появляться на экране! Спасибо .

+0

Если есть родительский контейнер, добавьте эту кнопку к нему, скажем, панель .add (убрать) – Zeus

+1

Ваша новичка вопиющая. Это нормально, но ваши проблемы больше, чем то, что можно решить здесь. Почему бы не искать простой учебник по графическому интерфейсу. –

+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

4

Вы должны

  1. Использование Качели, не АВТ
  2. Таким образом, создание свинг JButton объектов, а не кнопки.
  3. Создать JPanel, добавьте JButtons в JPanel
  4. Добавьте JPanel вашему JFrame перед отображением его
  5. Вы просто угадать в этом, и это никогда не работает. Пожалуйста, прочитайте the tutorials, поскольку все это объясняется там.
+0

3), 4) являются особой причиной, которая должна быть в «JPanel»? [Учебник Swing] (http://docs.oracle.com/javase/tutorial/uiswing/) – nachokk

+0

@nachokk: если он добавляет свои кнопки непосредственно в свой JFrame, который по умолчанию использует BorderLayout, без использования констант, он будет только отобразите последнюю добавленную кнопку. JPanel по умолчанию использует FlowLayout по умолчанию, что может быть лучше для его целей. –

+1

приятный ответ :) Я просто хочу знать, почему вы добавляете его в панель, +1 – nachokk

2

Кнопки должны быть размещены на JFrame. Вкратце, JFrame является основным контейнером или окном, используемым для приложений Java Swing. класс ButtonExample общественного {

public static void main(String[] args) { 

    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      JFrame frame = new JFrame(); 
      JButton balance = new JButton("Check Balance"); 
      JButton deposit = new JButton("Deposit"); 
      JButton withdraw = new JButton("Withdraw"); 

      frame.setLayout(new FlowLayout()); 
      frame.add(balance); 
      frame.add(deposit); 
      frame.add(withdraw); 

      frame.setVisible(true); 
     } 
    }); 
} 

}

+0

Есть ли веская причина для расширения 'JFrame'? – nachokk

+0

@nachokk Какова логика нераспространения JFrame? Состав над наследованием? Просто любопытно, я из мира J2EE и только начал смотреть глубже на Swing. –

+1

Не ваш нисходящий, но вам не нужно расширение, поскольку вы просто используете простой ванильный JFrame. Вы можете заменить JFrame на ButtonExample в своем основном методе, и это сработает. Расширение JFrame просто смущает. –

3

Вот уродливый (но короткий) способ сделать это -

public static void main(String[] args) { 
    JButton balance = new JButton("Check Balance"); 
    JButton deposit = new JButton("Deposit"); 
    JButton withdraw = new JButton("Withdraw"); 
    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(new BorderLayout()); 
    panel.add(balance, BorderLayout.WEST); 
    panel.add(withdraw, BorderLayout.EAST); 
    panel.add(deposit, BorderLayout.CENTER); 
    frame.add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
Смежные вопросы