Pregunta

Esto me está haciendo muy enojado, he trabajado en esto durante 2 días, 2 libros he abierto y han mirado a través de ellos, y todavía no puede conseguir este programa para ejecutar la forma que yo quiero que se ejecute. Estoy llegando al punto en el que si esto no ayuda, lo dejo.

Quiero una aplicación simple marco. Tiene un JComboBox centrada en la parte superior. Al lado se encuentra un campo de texto lo suficientemente grande para mostrar dígitos numéricos tales como "$ 49.99" A continuación se trata de un lugar para un área de texto que muestra los términos de servicio Debajo de eso es la casilla de aceptar las condiciones de servicio Debajo hay 2 botones "Aceptar" y "Rechazar"

He trabajado en esto durante 2 días, aquí está la codificación:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);
        JPanel pane1 = new JPanel(new FlowLayout());
        JPanel pane2 = new JPanel(new FlowLayout());

        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(this);
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        frame.setJMenuBar(menuBar);
        JComboBox packageChoice =  new JComboBox(tests);
        frame.add(packageChoice);


    }

     public void actionPerformed(ActionEvent e)
  {
  Object source = e.getSource();
  {
  }

}

EDIT: Se olvidó de añadir el segundo programa

public class JFrameWithPanel
{
    public static void main(String[] args)
    {
         JPanel panel = new Bar(new JFrame("CIT Test Program"));
    }
}

¿Cómo puedo conseguir que esto tiene todo donde yo quiero y aparece? Estoy muy confundido debido a esto y ahora apenas si entiendo cómo el trabajo marcos.

¿Fue útil?

Solución

Componentes de oscilación que se han establecido en un orden determinado.

Se comienza con un JFrame. Los únicos componentes que se colocan en el JFrame son una JMenuBar y un JPanel. No se agrega ningún otro componente en un JFrame. Agrega componentes en un JPanel.

Aquí está el código de Nick, reorganizado para definir los componentes en el orden correcto. Solía ??GridLayout porque era más rápido. Usted debe usar GridBagLayout, como dijo Nivas.

public class Bar {

    private static final long serialVersionUID = 1L;

    public Bar(final JFrame frame) {
        JMenuBar menuBar = buildMenuBar();
        frame.setJMenuBar(menuBar);

        JPanel masterPanel = new JPanel(new GridLayout(2, 1));

        JPanel pane1 = new JPanel(new GridLayout(3, 1));
        pane1.add(new JLabel("Welcome to the CIT Test Program "));
        pane1.add(new JLabel("Please select which Test Package from the list below."));
        JButton button = new JButton("Click Me");
        pane1.add(button);

        JPanel pane2 = new JPanel(new GridLayout(1, 1));
        String[] tests = { "A+ Certification", "Network+ Certification",
                "Security+ Certification", "CIT Full Test Package" };
        JComboBox packageChoice = new JComboBox(tests);
        pane2.add(packageChoice);

        masterPanel.add(pane1);
        masterPanel.add(pane2);

        frame.add(masterPanel);
        frame.pack();

        frame.setVisible(true);
//      frame.setSize(250, 250);

    }

    public JMenuBar buildMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenu helpMenu = new JMenu("Help");
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        JMenuItem newMenu = new JMenuItem("New  (Ctrl+N)");
        JMenuItem openMenu = new JMenuItem("Open  (Ctrl+O)");
        JMenuItem saveMenu = new JMenuItem("Save  (Ctrl+S)");
        saveMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

            }
        });
        JMenuItem exitMenu = new JMenuItem("Exit  (Ctrl+W)");
        JMenuItem cutMenu = new JMenuItem("Cut  (Ctrl+X)");
        JMenuItem copyMenu = new JMenuItem("Copy  (Ctrl+C)");
        JMenuItem pasteMenu = new JMenuItem("Paste  (Ctrl+V)");
        JMenuItem infoMenu = new JMenuItem("Help  (Ctrl+H)");
        fileMenu.add(newMenu);
        fileMenu.add(openMenu);
        fileMenu.add(saveMenu);
        fileMenu.add(exitMenu);
        editMenu.add(cutMenu);
        editMenu.add(copyMenu);
        editMenu.add(pasteMenu);
        helpMenu.add(infoMenu);
        return menuBar;
    }
}

Me movió el código JMenuBar en su propio método modo, es de esperar, el resto del código es más fácil de entender.

I tienen un Amo JPanel, que todos los otros componentes se añaden a.

I utiliza otro JPanel para mantener las dos JLabels y el JButton.

I utiliza un tercer JPanel para mantener el JComboBox.

El patrón básico es el siguiente:

  • Definir el JPanel.
  • Definir los componentes.
  • Añadir los componentes al JPanel.
  • Añadir los JPanel al maestro JPanel
  • Añadir los JPanel maestro al JFrame.

Otros consejos

Nick. Creo que lo primero que tiene que despejar es saber exactamente lo que quiere.

Te ayudé en esta pregunta https: //stackoverflow.com/questions/3055777/how-to -...

A partir de lo que estás describiendo ya tiene lo que necesita. ¿Qué hay de malo con esto:

alt text

Así que, realmente creo que debe describir claramente lo que quiere, con el fin de conseguirlo.

le ayudaría, pero hay que definir claramente cuál es su problema.

1. Su segundo programa planteo compilar. Usted está tratando de asignar un JFrame a un JPanel.

Debería haber sido

 JFrame frame = new Bar(new JFrame("CIT Test Program")); 

2. Funciona. Lo que queremos es que hay. Pero no como usted lo quiere, porque no ha contado java cómo quiere que se vea. Trate de usar un LayoutManager como GridBagLayout .

Si usted está en un apuro para crear una interfaz gráfica de usuario, pruebe con un IDE NetBeans como el que hace más fácil su trabajo a través de arrastrar y soltar.

EDIT:

Un ejemplo:

public class TestN extends JFrame
{
    private JLabel label ;
    private JComboBox combo;
    private JButton button;
    public TestN()
    {
        label = new JLabel("Label:");
        combo = new JComboBox();
        combo.addItem("Item 1");
        combo.addItem("Item 2");
        combo.addItem("Item 3");

        setLayout(new GridBagLayout());

        GridBagConstraints c1 = new GridBagConstraints();
        c1.gridx = 0;
        c1.gridy = 0;
        c1.weightx = 1;
        c1.weighty = 1;
        add(label, c1);

        GridBagConstraints c2 = new GridBagConstraints();
        c2.gridx = 1;
        c2.gridy = 0;
        c2.weightx = 1;
        c2.weighty = 1;
        add(combo, c2);

        button = new JButton("Ok");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.gridx = 2;
        c3.gridy = 0;
        c3.weightx = 1;
        c3.weighty = 1;
        add(button, c3);

        setTitle("Test");
        setSize(200,100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new TestN();
    }
}

Aviso: Este es un ejemplo básico sólo para dar un ejemplo. No pretende ser el código de producción; -)

Usted tiene:

public class Bar extends JFrame implements ActionListener
{
    public Bar(final JFrame frame)
    {
        String[] tests = { "A+ Certification", "Network+ Certification", "Security+ Certification", "CIT Full Test Package" };
        JButton button = new JButton("Click Meh");
        add(new JLabel("Welcome to the CIT Test Program "));
        add(new JLabel("Please select which Test Package from the list below."));
        frame.setVisible(true);
        frame.setSize(250,250);

Cada objeto Bar hereda de JFrame (es decir, un Bar objeto es un tipo de JFrame) pero se pasa en un objeto JFrame diferente (el parámetro frame) en el constructor. A continuación, llama a algunos métodos en el objeto Bar - tales como la adición de los dos objetos JLabel - y algunos en el pasado-en JFrame -. Tales como los métodos y setVisible setSize

Así que hay dos objetos diferentes JFrame y que hace un trabajo para cada uno de ellos y sólo uno de ellos está configurado nunca para ser visible.

Parece que es la única razón por la que está pasando en el JFrame al constructor es para establecer el título de la ventana. Si pasa en un String con el título al constructor Bar y super(title); entonces llamada como la primera línea del constructor Bar entonces usted no necesitará el pasado-en JFrame en absoluto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top