2014-01-05 2 views
0

Я создал систему, в которой я перечисляю различные места на поезде в GUI. Я решил использовать простой макет сетки с пронумерованными JButtons, представляющими сидения, а seatNo и пустые JLabels для представления пустого пространства (я понимаю, что это может быть тривиально, но это было просто). Я использовал Gridlayout, и я создал кнопки и ярлыки, как показано ниже.Индивидуальные идентификаторы JButtons в GridLayout

У меня есть список (compArray2) в отдельном классе, который состоит из 0s и 1s и направления, которые представляют собой место, где должно быть место и где не должно быть места. значение .getNum получает значение либо 0 для пустого пространства, либо 1 для места, а .getDir получает направление, в котором будет стоять сиденье.

public JPanel rowPanelCreation(int type, int rowNo, int width){ 

    theNoOfSeats=0; 
    JPanel panel = new JPanel(); 
    panel.setLayout(new GridLayout(0,width)); 

    List<seatLayout> layout = new ArrayList<>(); 
    layout = ModelConstants.compArray2; 


    for (seatLayout isit : x2){ 

     buttonEna = new JButton(); 
      buttonEna.setFont(new Font("Sans Serif", Font.BOLD , 14)); 
      buttonEna.setBorderPainted(false); 
     buttonDis = new JLabel(); 

     if (isit.getNum()==0){ 
      if (isit.getDir()=='x'){ 
      panel.add(buttonDis); 
      } 
     } 

     else if (isit.getNum()==1){ 

      theNoOfSeats++; 

      if (isit.getDir()=='N'){ 
       image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultN.png"); 
       buttonEna.setIcon(image); 
       buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats))); 
       buttonEna.setHorizontalTextPosition(JButton.CENTER); 
       buttonEna.setVerticalTextPosition(JButton.CENTER); 
       panel.add(buttonEna); 
       } 
      else if (isit.getDir()=='E'){ 
       image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultE.png"); 
       buttonEna.setIcon(image); 
       buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats))); 
       buttonEna.setHorizontalTextPosition(JButton.CENTER); 
       buttonEna.setVerticalTextPosition(JButton.CENTER); 
       buttonEna.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){JOptionPane.showMessageDialog(null,"You have chosen : ");}}); 
       panel.add(buttonEna); 
       } 
      else if (isit.getDir()=='S'){ 
       image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultS.png"); 
       buttonEna.setIcon(image); 
       buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats))); 
       buttonEna.setHorizontalTextPosition(JButton.CENTER); 
       buttonEna.setVerticalTextPosition(JButton.CENTER); 
       panel.add(buttonEna); 
       } 
      else if (isit.getDir()=='W'){ 
       image = new ImageIcon("/Users/Tomousee/NetBeansProjects/SortedList/src/Resources/chairDefaultW.png"); 
       buttonEna.setIcon(image); 
       buttonEna.setText(String.valueOf(ModelConstants.compSeatNo.get(theNoOfSeats))); 
       buttonEna.setHorizontalTextPosition(JButton.CENTER); 
       buttonEna.setVerticalTextPosition(JButton.CENTER); 
       panel.add(buttonEna); 
       } 
     } 
    } 
    return panel; 
} 

главная проблема, которую я имею что когда я нажимаю на одну из кнопок сиденья я хочу сообщение появляться говорить мне seatNo сиденья я выбрал это. Однако, когда я это делаю, он просто отображает последнее местоNo. Есть ли лучший способ сделать это? Я предполагаю, что, поскольку все кнопки в принципе одинаковы, нет возможности различать их?

+0

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

+0

@peeskillet теперь работает, спасибо за вашу помощь. – Tomousee

ответ

3

«Я хочу, чтобы сообщение появляться говорить мне seatNo сиденья я выбрал это. Однако, когда я делаю это он просто отображает самый последний seatNo.»

Это ваша проблема. Это справочная проблема. В конце концов, все кнопки будут иметь одинаковые ссылки JButton и JLabel. Таким образом, все кнопки и ярлыки получат последние кнопка и ссылка на метку, созданная, следовательно «отображает последнее место».

buttonEna = new JButton(); 
buttonEna.setFont(new Font("Sans Serif", Font.BOLD , 14)); 
buttonEna.setBorderPainted(false); 
buttonDis = new JLabel(); 

Вам нужно создать новый JButton и новый JLabel ссылку на каждой итерации

JBUtton buttonEna = new JButton(); 
buttonEna.setFont(new Font("Sans Serif", Font.BOLD , 14)); 
buttonEna.setBorderPainted(false); 
JLabel buttonDis = new JLabel(); 

Другой подход будет иметь массив JButton, петля для установки кнопок, и добавить их до Panel. Скажем, у вас есть GridLayout(2, 2). Затем вам понадобится массив из 4 JButton s

JButton[] buttons = new JButton[9]; 
... 
for (int i = 0; i < 4; i++){ 
    buttons[i] = new JButton(); 
    buttons[i].setFont(new Font("Sans Serif", Font.BOLD , 14)); 
    buttonEna.setBorderPainted(false); 
    // set other properties for button 
    panel.add(buttons[i]); 
} 
+0

[лучше и проще по putClientPropery] (http://stackoverflow.com/a/9300813/714968) – mKorbel

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