2016-07-03 4 views
-1

Я пытаюсь добавить прямоугольник и 30 JButton в JPanel totalGUI, но показан только прямоугольник.JToggleButton не отображается в GUI

public class SelectSeat { 

    static JFrame frame; 
    int a; 

    public JPanel createContentPane() throws IOException 
    { 

     JPanel totalGUI = new JPanel(); 
     RectDraw rect= new RectDraw(); 
     rect.setPreferredSize(new Dimension(330,35)); 
     totalGUI.setLayout(null); 
     totalGUI.setBackground(Color.WHITE); 
     totalGUI.add(rect); 
     Dimension d = rect.getPreferredSize(); 
     rect.setBounds(100, 20, d.width, d.height); 

     JToggleButton[] ButtonList = new JToggleButton[30]; 

     for(int i = 0; i < 30; i++) { 
      a=i+1; 
      ButtonList[i]= new JToggleButton(""+a); 
      totalGUI.add(ButtonList[i]); 
     } 
     totalGUI.add(rect); 

     return totalGUI; 
    } 

    void setVisible(boolean b) { 
     // TODO Auto-generated method stub 
    } 

    static void createAndShowGUI() throws IOException 
    { 

     JFrame.setDefaultLookAndFeelDecorated(true); 
     frame = new JFrame("Seat Selection"); 

     //Create and set up the content pane. 
     SelectSeat demo = new SelectSeat(); 
     frame.setContentPane(demo.createContentPane()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(535, 520); 
     frame.setLocation(500,220); 
     frame.setVisible(true); 
    } 

    private static class RectDraw extends JPanel 
    { 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      g.setColor(Color.GRAY); 
      g.fillRect(0,0,getWidth(),getHeight()); 
      g.setColor(Color.BLUE); 
      g.drawString("Movie Sceen", 130, 20); 
      } 


    } 

} 

enter image description here

Последний выход

enter image description here


BuyTicket

next.addActionListener(new ActionListener() // go to SelectSeat class 
     { 
      public void actionPerformed(ActionEvent e) 
       { 
       SelectSeat back = new SelectSeat(); 
       back.setVisible(true); 
        setVisible(false); 
        frame.dispose(); 
       } 
     }); 

SelectSeat

public class SelectSeat { 

    public static void main(String[] atrg) throws IOException { 
    JFrame meinJFrame = new JFrame(); 
    meinJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    meinJFrame.setSize(800, 600); 
    meinJFrame.setVisible(true); 
    meinJFrame.add(new RectDraw()); 
    JPanel over = new JPanel(new GridLayout(2, 1)); 
    over.add(new RectDraw()); 
    meinJFrame.setTitle("Cinemax-Beispiel"); 
    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(6, 5)); 
    for (int i = 1; i <= 30; i++) { 
     panel.add(new JToggleButton("Seat :" + i)); 
    } 
    over.add(panel); 
    meinJFrame.add(over); 
    } 

    public void setVisible(boolean b) { // auto-generated 
     // TODO Auto-generated method stub 

    } 



} 

class RectDraw extends JPanel { 
    @Override 
    protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.GRAY); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    g.setColor(Color.WHITE); 
    g.drawString("Movie Sceen", 130, 20); 
    } 
}  
+1

Инстансы не должны начинаться с заглавной буквы - это должно быть 'buttonList' , В этом случае я мог бы создать внутренний JPanel с GridLayout, добавить к нему все эти переключатели, а затем добавить панель в 'totalGUI'. Наконец, я бы установил макет totalGUI для SpringLayout, поэтому ширина и высота вашего прямоугольника и кнопок будут регулироваться в зависимости от размера JFrame. –

+0

1) Чтобы получить более эффективную помощь, отправьте сообщение [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). Для этого кода нужны, по крайней мере, операторы impot и 'main (String []) ', чтобы поставить его на экран, чтобы быть C, V или E MCVE. 2) Обеспечить ASCII-искусство или простой рисунок * предназначенного макета GUI при минимальном размере и, если он изменен, с большей шириной и высотой. –

+0

@AndrewThompson Нужно ли иметь 'main (String [])'? У меня много классов без 'main', но они все еще могут работать. –

ответ

2

Дело в том, что вы не очень хорошо организовать JPanel Вы должны организовать панели в таком виде:

----JPanel----------------------------| 
| ---Screen el---------------------- | 
| |    txt     | | 
| |         | | 
| ----------------------------------- | 
| ---seats -------------------------- | 
| |seat1 seat2 .. ... ... ... | | 
| |seat11 seat12 .. ... ... .. | | 
| |... ... ...      | | 
| ----------------------------------- | 
--------------------------------------- 


public class Mango { 

    public static void main(String[] atrg) throws IOException { 
    JFrame meinJFrame = new JFrame(); 
    meinJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    meinJFrame.setSize(800, 600); 
    meinJFrame.setVisible(true); 
    meinJFrame.add(new RectDraw()); 
    JPanel over = new JPanel(new GridLayout(2, 1)); 
    over.add(new RectDraw()); 
    meinJFrame.setTitle("Cinemax-Beispiel"); 
    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(6, 5)); 
    for (int i = 1; i <= 30; i++) { 
     panel.add(new JToggleButton("Seat :" + i)); 
    } 
    over.add(panel); 
    meinJFrame.add(over); 
    } 
} 

class RectDraw extends JPanel { 
    private static final long serialVersionUID = -6507364980760764676L; 

    @Override 
    protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.GRAY); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    g.setColor(Color.WHITE); 
    g.drawString("Movie Sceen", 130, 20); 
    } 
} 

enter image description here

+0

Я попытался запустить ваш код, но кнопка JToggle не появилась. Проверьте мой отредактированный пост. Спасибо –

+0

Является ли ваш экран полным? –

+0

Да, это только показывает «киноэкран» внутри 'Jpanel' –

0

Вы должны указать границы кнопок, так как вы используете нулевой менеджер компоновки.

+2

* «Вам нужно ...» * .. использовать макеты, чтобы удалить догадки, и создать надежный, надежный графический интерфейс. –

+0

@AndrewThompson Я ответил, почему он не появляется, а не то, что лучше всего подходит. Наверное, я должен был добавить «... чтобы кнопки отображались» в конце, поэтому великий мастер кодирования, как и вы, был бы доволен. Я отправил комментарий под вопрос, как мне это сделать с менеджерами макетов. –

+1

* «Я разместил комментарий под вопросом, как мне это сделать с менеджерами компоновки.«* Если вы добавите код в свой ответ, чтобы продемонстрировать этот подход, я могу удалить нижний предел. Если код достаточно хорош, я могу даже усовершенствовать. Предоставление« подсказок », которые могут заставить новичка ошибочно думать, что макет« нуль »работоспособен –

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