2014-11-05 5 views
1

Я пытаюсь получить JButtons, которые были добавлены в JPanel, чтобы отображаться во время выполнения программы, однако они появляются только при наведении мыши на них, они остаются невидимыми до тех пор ,JButtons не отображаются до тех пор, пока MouseOver

Ниже мой код, я пробовал перерисовать() и revalidate() без везения.

Там также, как представляется, проблема с высоты JPanel, это, кажется, больше, чем в главном окне по какой-то причине

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 


public final class SideMenu extends JPanel implements ActionListener{ 
    private final int width; 
    private final int height; 

    public SideMenu(int width, int height){   
     this.width = width; 
     this.height = height; 
     this.setLayout(new GridLayout(0,1)); 
     this.add(new JButton("button1")); 
     this.add(new JButton("button2")); 
     this.add(new JButton("button3")); 
     this.revalidate(); 
     this.repaint(); 
    } 

    @Override 
    public void paint(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.black); 
     g.fillRect(0, 0, width, height); 
    } 


    @Override 
    public void actionPerformed(ActionEvent e) {   
     repaint(); 
    } 

    public static void main(String[] args){ 
     int width = 300, height = 400; 

     JFrame jf = new JFrame(); 
     jf.setTitle("Fish Tank"); 
     jf.setSize(width, height); 
     jf.setVisible(true); 
     jf.setLayout(null); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     ///jf.setResizable(false); 

     SideMenu side_menu = new SideMenu(100,height);   
     jf.add(side_menu); 
     side_menu.setBounds(200, 0, 100, height); 
    } 
} 
+2

'jf.setVisible (true);' должно быть последним утверждением в вашем 'main' методе. – Tom

ответ

3

Используйте paintComponent(..) метод вместо paint(..):

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.black); 
    g.fillRect(0, 0, width, height); 
} 

Подробнее о custom paintings.

Также звоните jf.setVisible(true); в конце построения графического интерфейса пользователя, когда вы добавляете все компоненты в JFrame.

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