2015-11-26 2 views
0

Я пытаюсь разработать графический интерфейс для голосования, и у меня есть основной класс и класс голосования. Класс Ballot расширяет JPanel и создает кнопки внутри класса. Я пытаюсь добавить объекты Ballot к основному JFrame, но когда я запускаю программу, кнопки не отображаются. Любая помощь будет оценена по достоинству. Вот код.Почему JButtons не отображается в JFrame?

Assig5.java:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JOptionPane; 
import javax.swing.WindowConstants; 
import javax.swing.BoxLayout; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.Scanner; 
import java.util.ArrayList; 



public class Assig5 extends JFrame 
{ 
    public Assig5() 
    { 
     super("E-Vote Version 1.0"); 
     JPanel castVotePanel = new JPanel(); 
     BoxLayout layout = new BoxLayout(castVotePanel, BoxLayout.Y_AXIS); 
     castVotePanel.setLayout(layout); 
     ArrayList<String> ballots = new ArrayList<String>(); 

     try{ 
      ballots = readBallotFile("ballots.txt"); 
     } 
     catch(FileNotFoundException e){ 
      System.exit(0); 
     } 

     ArrayList<Ballot> ballotList = addBallots(ballots); 
     for(Ballot b : ballotList) 
     { 
      add(b); 
     } 

     castVotePanel.add(createLoginButton()); 
     castVotePanel.add(createCastButton()); 

     add(castVotePanel); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String args[]) 
    { 
     Assig5 assig5 = new Assig5(); 
    } 

    public JButton createLoginButton() 
    { 
     JButton loginButton = new JButton("Login to Vote"); 
     loginButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       // display/center the jdialog when the button is pressed 
       String input = JOptionPane.showInputDialog("Please enter your voter ID: "); 
      } 
     }); 
     return loginButton; 
    } 



    public JButton createCastButton() 
    { 
     JButton castButton = new JButton("Cast Vote"); 
     castButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 

      } 
     }); 
     return castButton; 
    } 

    public ArrayList<Ballot> addBallots(ArrayList<String> ballotContents) 
    { 
     ArrayList<Ballot> ballotList = new ArrayList<Ballot>(); 
     for(int i = 0; i < ballotContents.size(); i++) 
     { 

      String[] splitBallotContent = ballotContents.get(i).split("[:,]"); 
      String[] options = new String[splitBallotContent.length - 2]; 
      for(int j = 2; j < splitBallotContent.length; j++) 
      { 
       options[j - 2] = splitBallotContent[j]; 
      } 
      Ballot ballot = new Ballot(splitBallotContent[0], splitBallotContent[1], options); 
      ballotList.add(ballot); 
     } 
     return ballotList; 
    } 

    public static ArrayList<String> readBallotFile(String filename) throws FileNotFoundException 
    { 
     ArrayList<String> list = new ArrayList<String>(); 
     Scanner s = new Scanner(new File(filename)); 
     int numBallots = Integer.parseInt(s.nextLine()); //we need to get to next line 
     for(int i = 0; i < numBallots; i++) 
     { 
      if(s.hasNextLine()) 
      { 
       list.add(s.nextLine()); 
      } 

     } 
     s.close(); 
     return list; 
    } 

Ballot.java:

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JLabel; 
import javax.swing.JButton; 
import javax.swing.JOptionPane; 
import javax.swing.WindowConstants; 
import javax.swing.BoxLayout; 
import java.awt.*; 
import java.awt.event.*; 

public class Ballot extends JPanel 
{ 
    public Ballot(String ballotID, String title, String[] options) 
    { 
     super(); 
     BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS); 
     setLayout(layout); 
     add(new JLabel(title, JLabel.CENTER)); 
     for(String s : options) 
     { 
      add(new JButton(s)); 
      //add actionlistener here 
     } 
    } 
} 
+0

Это только 'JButton', которые не являются отображение? –

+2

'JFrame' использует' BorderLayout', вы добавляете как 'castVotePanel', так и все панели' Ballot' в ту же позицию на фрейме ('CENTER'). Возможно, вам захочется использовать другой менеджер компоновки – MadProgrammer

ответ

1

JFrame использует BorderLayout, вы добавляете оба castVotePanel и все Ballot панели в том же положении на раме (CENTER). Возможно, вы захотите рассмотреть возможность использования другого менеджера компоновки

См. How to Use BorderLayout и Laying Out Components Within a Container для получения более подробной информации.

Например ...

import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.WindowConstants; 

public class Assig5 extends JFrame { 

    public Assig5() { 
     super("E-Vote Version 1.0"); 
     JPanel castVotePanel = new JPanel(); 
     BoxLayout layout = new BoxLayout(castVotePanel, BoxLayout.Y_AXIS); 
     castVotePanel.setLayout(layout); 
     ArrayList<String> ballots = new ArrayList<String>(); 

     try { 
      ballots = readBallotFile("ballots.txt"); 
     } catch (FileNotFoundException e) { 
      System.exit(0); 
     } 

     setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridwidth = GridBagConstraints.REMAINDER; 
     gbc.weightx = 1; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 

     ArrayList<Ballot> ballotList = addBallots(ballots); 
     for (Ballot b : ballotList) { 
      add(b, gbc); 
     } 

     castVotePanel.add(createLoginButton()); 
     castVotePanel.add(createCastButton()); 

     add(castVotePanel, gbc); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String args[]) { 
     Assig5 assig5 = new Assig5(); 
    } 

    public JButton createLoginButton() { 
     JButton loginButton = new JButton("Login to Vote"); 
     loginButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       // display/center the jdialog when the button is pressed 
       String input = JOptionPane.showInputDialog("Please enter your voter ID: "); 
      } 
     }); 
     return loginButton; 
    } 

    public JButton createCastButton() { 
     JButton castButton = new JButton("Cast Vote"); 
     castButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

      } 
     }); 
     return castButton; 
    } 

    public ArrayList<Ballot> addBallots(ArrayList<String> ballotContents) { 
     ArrayList<Ballot> ballotList = new ArrayList<Ballot>(); 
     int id = 0; 
     for (int i = 0; i < 10; i++) { 

      String[] options = new String[]{"A", "B", "C", "D"}; 
      Ballot ballot = new Ballot(Integer.toString(++id), "Help " + id, options); 
      ballotList.add(ballot); 
     } 
     return ballotList; 
    } 

    public static ArrayList<String> readBallotFile(String filename) throws FileNotFoundException { 
     ArrayList<String> list = new ArrayList<String>(); 
//  Scanner s = new Scanner(new File(filename)); 
//  int numBallots = Integer.parseInt(s.nextLine()); //we need to get to next line 
//  for (int i = 0; i < numBallots; i++) { 
//   if (s.hasNextLine()) { 
//    list.add(s.nextLine()); 
//   } 
// 
//  } 
//  s.close(); 
     return list; 

    } 

    public class Ballot extends JPanel { 

     public Ballot(String ballotID, String title, String[] options) { 
      super(); 
      BoxLayout layout = new BoxLayout(this, BoxLayout.Y_AXIS); 
      setLayout(layout); 
      add(new JLabel(title, JLabel.CENTER)); 
      for (String s : options) { 
       add(new JButton(s)); 
       //add actionlistener here 
      } 
     } 
    } 
} 
0

JFrame использует BorderLayout по умолчанию и ваши все панели по центру границы, поэтому его не отображается

Используйте различные позиции и различные макеты

для получения дополнительной информации о планировках: https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html https://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

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