2013-05-28 5 views
0

Я новичок в качелях, может ли кто-нибудь помочь мне с этим ...Почему он не показывает мой ярлык?

Он не показывает мою «метку», вместо этого он показывает мне только компоненты, которые находятся в классе «панель».

Еще один вопрос, может ли кто-нибудь уточнить меня о LayoutManagers? Можно ли использовать 2 или более LayoutManagers в кадре? как для кадра, я буду использовать FlowLayout, и у меня есть JPanel, добавленный к кадру, для которого я буду использовать BoxLayout ... возможно ли это во-первых?

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

public class JForm1 extends JFrame 
{ 
    public JForm1() 
    { 
     init(); 
    } 
    public static void main(String[] args) 
    { 
     JForm1 form = new JForm1(); 
    } 
    public void init() 
    { 
     JFrame frame = new JFrame("My Form 1"); 
     frame.setSize(500,500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS)); 
     JLabel label = new JLabel("Enter your Name : "); 
     panel MyPanel = new panel(); 
     frame.getContentPane().add(label); 
     frame.getContentPane().add(MyPanel); 
     frame.setVisible(true); 
    } 
} 
class panel extends JPanel implements ActionListener 
{ 
    JButton submitButton; 
    JTextField text; 
    panel() 
    { 
     this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); 
    } 
    public void paintComponent(Graphics g) 
    { 
     text = new JTextField("Enter Name here"); 
     text.setSize(100,25); 
     submitButton = new JButton("Submit"); 
     submitButton.setSize(50,90); 
     submitButton.setBounds(200, 0, 80, 80); 
     submitButton.addActionListener(this); 
     this.add(text); 
     this.add(submitButton); 
    } 
    public void actionPerformed(ActionEvent event) 
    { 
     if(event.getSource()==submitButton) 
     { 
      System.out.println("The Entered Name is : "+text.getText()); 
     } 
    } 
} 

ответ

3

Что это?

public void paintComponent(Graphics g) 
{ 
    text = new JTextField("Enter Name here"); 
    text.setSize(100,25); 
    submitButton = new JButton("Submit"); 
    submitButton.setSize(50,90); 
    submitButton.setBounds(200, 0, 80, 80); 
    submitButton.addActionListener(this); 
    this.add(text); 
    this.add(submitButton); 
} 

Этот код не имеет ничего общего в paintComponent. paintComponent о «покраске компонента», т. Е. Нарисовать прямоугольник, нарисовать линию, заполнить овал и т. Д. Это абсолютно не то место, где можно добавить свои компоненты. Вместо этого вызовите этот код в свой конструктор.

Кроме того, если вы используете LayoutManager (что вам нужно), вызов setSize/setBounds/setLocation бесполезен (dimply удаляет эти вызовы).

еще несколько вещей:

  • Если переопределить paintComponent, убедитесь, что для вызова super -метод
  • Не распространяется JFrame, если не требуется (здесь она явно не нужна)
  • Следуйте соглашениям об именах Java (имена классов должны начинаться с буквы UpperCase, переменных и методов с буквой lowerCase)
  • Весь код, связанный с Swing, должен вызываться на EDT. Начните свой интерфейс в блоке SwingUtilities.invokeLater().
+0

спасибо. это помогло! – Ravitheja

+0

Существуют ли стандарты для Java, например, для ANSI C? Если кто-нибудь может рассказать мне те или сказать, где я могу их найти? – Ravitheja

+0

@Ravitheja Вот список соглашений: http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html и, в частности, соглашения об именах (с примерами): http: // www. oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367 –

1

Попробуйте изменить раскладку на FlowLayout для mypanel.

mypanel.setLayout(new FlowLayout()); 
+0

изменен в самом конструкторе, но не используется. даже после перехода на FlowLayout нет изменений в появлении – Ravitheja

+0

try frame.getContentPane(). setLayout(). (new FlowLayout()); –

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