2014-01-24 7 views
0

이 프로그램을 원한다면 "설명"열에 요약 정보를 추가 할 수있는 "합계"버튼이 있어야합니다. 내가 라디오 방송국에서 타이틀 7 살, 나이 7 살, 그리고 체크 박스에서 선택한 공포에 대해 "열심히"말합니다. 버튼을 누르면 열 아래에 "Die hard, 7, horror"라고 표시됩니다. 이 사건을 어떻게 해결할 지 모르겠습니다.JButton + 라디오 박스 + 체크 박스

package naplety.Swing; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BorderFactory; 
import javax.swing.ButtonGroup; 
import javax.swing.DefaultListModel; 
import javax.swing.JButton; 
import javax.swing.JCheckBoxMenuItem; 
import javax.swing.JFrame; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JRadioButton; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.ListModel; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.JCheckBox; 

public class SamodzielnaListaOsob extends JFrame implements ActionListener { 

    JButton dodaj, erease; 
    JTextField film; 
    DefaultListModel<String> listFilm; 
    DefaultTableModel tableFilm; 

    public SamodzielnaListaOsob(String title) { 
     super(title); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     final JTextField film = new JTextField("Wpisz tytul filmu", 10); 
     film.setBorder(BorderFactory.createTitledBorder("Film")); 

     JPanel p1 = new JPanel(); 
     p1.add(film); 

     JButton dodaj = new JButton("Add to list"); 
     dodaj.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       String nowyFilm = film.getText(); 
       if (nowyFilm != "") { 
        listFilm.addElement(nowyFilm); 
        film.setText(""); 
       } 
      } 
     }); 
     JButton erease = new JButton("Clear"); 
     erease.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       film.setText(""); 

      } 
     }); 
     JButton dodajDoTabeli = new JButton("Add to table"); 
     dodajDoTabeli.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       String nowyFilm = film.getText(); 
       if (nowyFilm != "") { 
        int ile = tableFilm.getRowCount(); 
        tableFilm.addRow(new Object[] { ile + 1, nowyFilm }); 
       } 
      } 
     }); 

     JRadioButton sevenbutton = new JRadioButton("7"); 
     JRadioButton twbutton = new JRadioButton("12"); 
     JRadioButton sixbutton = new JRadioButton("16"); 
     JRadioButton eightbutton = new JRadioButton("18"); 

     ButtonGroup bg1 = new ButtonGroup(); 
     bg1.add(sevenbutton); 
     bg1.add(twbutton); 
     bg1.add(sixbutton); 
     bg1.add(eightbutton); 

     JPanel radioPanel = new JPanel(); 
     radioPanel.setLayout(new GridLayout(4, 0)); 
     radioPanel.add(sevenbutton); 
     radioPanel.add(twbutton); 
     radioPanel.add(sixbutton); 
     radioPanel.add(eightbutton); 

     radioPanel.setBorder(BorderFactory.createTitledBorder(
       BorderFactory.createEtchedBorder(), "Age")); 
     radioPanel.setSize(200, 200); 

     JCheckBox Horror = new JCheckBox("Horror"); 
     JCheckBox Komedia = new JCheckBox("Comedy"); 
     JCheckBox Thriller = new JCheckBox("Thriller"); 

     JCheckBoxMenuItem listac = new JCheckBoxMenuItem(); 
     listac.add(Horror); 
     listac.add(Komedia); 
     listac.add(Thriller); 

     JPanel listaChceck = new JPanel(); 
     listaChceck.add(Horror); 
     listaChceck.add(Komedia); 
     listaChceck.add(Thriller); 
     listaChceck.setLayout(new GridLayout(3, 0)); 

     JPanel p2 = new JPanel(); 
     p2.add(dodaj); 
     p2.add(erease); 
     p2.add(dodajDoTabeli); 
     p2.add(radioPanel); 
     p2.add(listaChceck); 

     listFilm = new DefaultListModel<String>(); 
     listFilm.addElement("Achacy"); 
     listFilm.addElement("Bonifacy"); 
     listFilm.addElement("Cezary"); 

     JList<String> lista = new JList<String>(listFilm); 
     JScrollPane sl = new JScrollPane(lista); 
     sl.setPreferredSize(new Dimension(150, 150)); 
     sl.setBorder(BorderFactory.createTitledBorder("List")); 

     String[] kolumnyTabeli = { "Nr", "Movie", "Description" }; 
     tableFilm = new DefaultTableModel(kolumnyTabeli, 0) { 

     }; 
     JTable tabela = new JTable(tableFilm); 
     JScrollPane st = new JScrollPane(tabela); 
     st.setPreferredSize(new Dimension(300, 150)); 
     st.setBorder(BorderFactory.createTitledBorder("Table")); 

     JPanel p3 = new JPanel(); 
     p3.add(sl); 
     p3.add(st); 

     setPreferredSize(new Dimension(900, 900)); 
     setVisible(true); 
     p1.add(p2); 
     p2.add(p3); 
     setContentPane(p1); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new SamodzielnaListaOsob("List of movies"); 
      } 
     }); 
    } 

} 
+2

(하지만이 방법으로 문제가 의심) - '만약 (! nowyFilm = "") '. '.equals() '를 사용하십시오. –

+0

peerskillet이 말한 것. 또는'nowyFilm.isEmpty()'를 사용하여 길이가 0 인 문자열 (또는 귀하의 경우에는'! nowyFilm.isEmpty()')을 검사 할 수 있습니다. –

+0

추가 팁은 항상 환영합니다! – user3177987

답변

1
  1. 당신은 당신의 변수를 선언해야 하나 당신이 그들에 액세스하거나 내가 한 어떤 세계를 선언하기 전에. 나는이 방법을 선호한다.

  2. 프레임에 .pack()을 사용하면 프로그램을 시작할 때 실제로 무엇인가가 표시됩니다.

  3. 더 자세히 보려면 ​​LayoutManager를 사용하는 방법을 알아보십시오.

  4. RadioButtonsCheckBoxes의 배열을 사용하면 더 쉽게 반복 할 수 있습니다. if 문장을 수동으로 작성해야하는데 루프를 통과 할 수 있으면 필요하지 않습니다. 얻으려면

  5. 은의 RadioButton 또는 확인란이, 당신의 모든 구성 요소를 추가 .isSelected()

  6. .setVisible(true) 후 사용 선택됩니다. 여기


은 리팩토링 코드입니다. 그 외에는 아무 것도하지 않았지만 질문에 게시 된 문제를 해결하십시오. Add Film 버튼을 눌렀을 때 정보를 추가합니다.

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class SamodzielnaListaOsob extends JFrame { 

    JButton dodaj, erease; 
    JTextField film; 
    DefaultListModel<String> listFilm; 
    DefaultTableModel tableFilm; 
    JList<String> lista = null; 

    JRadioButton sevenbutton = new JRadioButton("7"); 
    JRadioButton twbutton = new JRadioButton("12"); 
    JRadioButton sixbutton = new JRadioButton("16"); 
    JRadioButton eightbutton = new JRadioButton("18"); 

    JCheckBox Horror = new JCheckBox("Horror"); 
    JCheckBox Komedia = new JCheckBox("Comedy"); 
    JCheckBox Thriller = new JCheckBox("Thriller"); 

    ButtonGroup bg1 = new ButtonGroup(); 

    public SamodzielnaListaOsob(String title) { 
     super(title); 

     setDefaultCloseOperation(EXIT_ON_CLOSE); 

     final JTextField film = new JTextField("Wpisz tytul filmu", 10); 
     film.setBorder(BorderFactory.createTitledBorder("Film")); 

     JPanel p1 = new JPanel(); 
     p1.add(film); 

     JButton dodaj = new JButton("Add to list"); 
     dodaj.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       String nowyFilm = film.getText(); 
       if (nowyFilm != "") { 
        listFilm.addElement(nowyFilm); 
        film.setText(""); 
       } 
      } 
     }); 
     JButton erease = new JButton("Clear"); 
     erease.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       film.setText(""); 

      } 
     }); 
     JButton dodajDoTabeli = new JButton("Add to table"); 
     dodajDoTabeli.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       String nowyFilm = film.getText(); 
       if (nowyFilm != "") { 
        int ile = tableFilm.getRowCount(); 
        String title = lista.getSelectedValue(); 
        int age; 
        if (sixbutton.isSelected()) { 
         age = 16; 
        } else if (sevenbutton.isSelected()) { 
         age = 7; 
        } else if (eightbutton.isSelected()) { 
         age = 18; 
        } else { 
         age = 12; 
        } 
        String genres = ""; 
        if (Horror.isSelected()) { 
         genres += "Horror, "; 
        } 
        if (Komedia.isSelected()) { 
         genres += "Komedia, "; 
        } 
        if (Thriller.isSelected()) { 
         genres += "Thriller"; 
        } 

        String desc = title + ", " + age + ", " + genres; 
        tableFilm.addRow(new Object[]{ile + 1, nowyFilm, desc}); 
       } 
      } 
     }); 

     bg1.add(sevenbutton); 
     bg1.add(twbutton); 
     bg1.add(sixbutton); 
     bg1.add(eightbutton); 

     JPanel radioPanel = new JPanel(); 
     radioPanel.setLayout(new GridLayout(4, 0)); 
     radioPanel.add(sevenbutton); 
     radioPanel.add(twbutton); 
     radioPanel.add(sixbutton); 
     radioPanel.add(eightbutton); 

     radioPanel.setBorder(BorderFactory.createTitledBorder(
       BorderFactory.createEtchedBorder(), "Age")); 
     radioPanel.setSize(200, 200); 

     JCheckBoxMenuItem listac = new JCheckBoxMenuItem(); 
     listac.add(Horror); 
     listac.add(Komedia); 
     listac.add(Thriller); 

     JPanel listaChceck = new JPanel(); 
     listaChceck.add(Horror); 
     listaChceck.add(Komedia); 
     listaChceck.add(Thriller); 
     listaChceck.setLayout(new GridLayout(3, 0)); 

     JPanel p2 = new JPanel(); 
     p2.add(dodaj); 
     p2.add(erease); 
     p2.add(dodajDoTabeli); 
     p2.add(radioPanel); 
     p2.add(listaChceck); 

     listFilm = new DefaultListModel<String>(); 
     listFilm.addElement("Achacy"); 
     listFilm.addElement("Bonifacy"); 
     listFilm.addElement("Cezary"); 

     lista = new JList<String>(listFilm); 
     JScrollPane sl = new JScrollPane(lista); 
     sl.setPreferredSize(new Dimension(150, 150)); 
     sl.setBorder(BorderFactory.createTitledBorder("List")); 

     String[] kolumnyTabeli = {"Nr", "Movie", "Description"}; 
     tableFilm = new DefaultTableModel(kolumnyTabeli, 0) { 

     }; 
     JTable tabela = new JTable(tableFilm); 
     JScrollPane st = new JScrollPane(tabela); 
     st.setPreferredSize(new Dimension(300, 150)); 
     st.setBorder(BorderFactory.createTitledBorder("Table")); 

     JPanel p3 = new JPanel(); 
     p3.add(sl); 
     p3.add(st); 


     p1.add(p2); 
     p2.add(p3); 
     setContentPane(p1); 

     pack(); 
     setPreferredSize(new Dimension(900, 900)); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new SamodzielnaListaOsob("List of movies"); 
      } 
     }); 
    } 

} 
+0

또는 예를 들어 다음과 같이 작업 할 수도 있습니다. 네 개의 라디오 버튼 이상을 가지고 있다면'Enumeration radioButtons = bg1.getElements(); 장르에는 비슷한 것이 있어야합니다. –

+0

@peeskillet 오 와우! 고맙습니다. 힘든 일과 시간을 보내 주셔서, 아픈 팁을 사용하십시오. 또한 내 문제를 해결해 주셔서 감사합니다. 간단하고 논리적으로 보입니다. – user3177987

+0

@ user3177987 그냥이 대답을 받아 들여 충분히 감사합니다. (확인 표시) –

0

라디오 버튼과 체크 버튼이 텍스트 필드처럼 작동하지 않습니다. 텍스트 필드에서 유용한 값은 "text"멤버에서 가져옵니다 (예 : getText()). radioButton은 고정 된 선택 세트를 대신 정의합니다 (물론, 동적으로 만들 수는 있지만 가치가 없으며 "예"와 "아니오"와 같은 종류의 작업에는 더 좋은 구성 요소가 있습니다). 보통, 당신이 어떤 rabiobutton을 가져 왔을 때, 당신은 isChecked() 메소드를 사용합니다 (boolean을 반환합니다, isChecked()일지도 모름). 예 : 그럼에도 불구하고

String age = 0; 
if(sevenbutton.isSelected()){ 
    age = 7; 
} 

, 난 당신이 gettext에()를 사용하여 sevenbutton의 텍스트에서 값을 얻을 수 있다고 생각하지만, 어쨌든 확인하는 라디오 버튼 확인하는 거 필요가있어. checkButton은 매우 유사한 방식으로 작동하지만 비 독점적 인 선택을 위해 isSelected() 메서드 또는 이와 유사한 메서드를 사용해야합니다. 귀하의 방법과 같아야합니다!`==`또는`=`로 문자열을 비교하지 않는다, 우선 들어

private void addMovie(){ 
    String age = "0"; 
    String gender = ""; 
    //Evaluate radioButtons 
    if(sevenbutton.isSelected()){ 
     age = 7; 
    } 
    //Evaluate checkbuttons 
    if(Horror.isSelected()){ 
     gender = gender+" horror"; 
    } 

    String movie = film+" "+age+" "+gender; 
    //do anything else 
} 
관련 문제