Код слайд-шоу с графическим интерфейсом для начинающих не работает (может быть проблема с циклом или кнопкой, не уверены) - PullRequest
0 голосов
/ 03 июня 2019

Я создаю слайд-шоу, в котором будет одна кнопка для перехода к следующему изображению, и предполагается, что они будут циклически перемещаться по ним.

Iv попытался переключиться на оператор case и вложенные логические операторы для моего цикла.

/*
 *
 */


import java.util.Scanner;
import javax.swing.*;

import java.awt.Color;
import java.awt.event.*;

public class SlideShow implements ActionListener {

    JFrame frame;
    JPanel picture;
    JLabel label, picture1;
    JButton button;
    JPanel contentPane;
    int x = 0;




    public SlideShow() {
        /* Create and set up the frame */
        frame = new JFrame("SlideShow");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /* Create a content pane with a BoxLayout and empty borders */
        contentPane = new JPanel();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
        contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        contentPane.setBackground(Color.white);

        /* Create a label that shows a die face */
        picture1 = new JLabel(new ImageIcon("attachment_142650738.jpg"));
        picture1.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        picture1.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
        contentPane.add(picture1);

        button = new JButton("Next photo");
        button.setAlignmentX(JButton.CENTER_ALIGNMENT);
        button.addActionListener(this);
        contentPane.add(button);

        /* Add content pane to frame */
        frame.setContentPane(contentPane);

        /* Size and then display the frame. */
        frame.pack();
        frame.setVisible(true);
    }








    //ActionPerformed//
    public void actionPerformed(ActionEvent event) {
        String[] array = {
            "attachment_142650738.jpg", // 0
            "attachment_142650739.jpg", // 1
            "attachment_142650741.jpg", // 2
            "attachment_142650742.jpg" // 3     
        };


        x += 0;
        if (x == 1) {
            picture1.setIcon(new ImageIcon("attachment_142650738.jpg"));
        } else if (x == 2) {
            picture1.setIcon(new ImageIcon("attachment_142650738.jpg"));
        } else if (x == 3) {
            picture1.setIcon(new ImageIcon("attachment_142650738.jpg"));
        } else if (x == 4) {
            picture1.setIcon(new ImageIcon("attachment_142650738.jpg"));
        } else if (x == 5) {
            x = 0;
            picture1.setIcon(new ImageIcon("attachment_142650738.jpg"));
        }


    }




    //GUI//
    private static void runGUI() {
        JFrame.setDefaultLookAndFeelDecorated(true);

        SlideShow ok = new SlideShow();


    }


    public static void main(String[] args) {
        /* Methods that create and show a GUI should be
           run from an event-dispatching thread */
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                runGUI();
            }
        });
    }
}

В данный момент ошибок нет, но у кнопки нет результата.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Ваш код уже довольно хорош, но вам придется внести несколько изменений. Во-первых, вам не нужны операторы if / else, вы можете просто получить доступ к массиву. Затем я бы также увеличил значение x и внес небольшие изменения, чтобы слайд-шоу началось с начала, когда вы в конце. Конечно, вам нужно заменить мой массив изображений на ваш.

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class SlideShow implements ActionListener {

    JFrame frame;
    JPanel picture;
    JLabel label, picture1;
    JButton button;
    JPanel contentPane;
    int x = 0;

    String[] array = {
            "D://image1.jpg",
            "D://image2.jpg",
            "D://image3.gif"
    };

    public SlideShow() {
        /* Create and set up the frame */
        frame = new JFrame("SlideShow");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /* Create a content pane with a BoxLayout and empty borders */
        contentPane = new JPanel();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
        contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        contentPane.setBackground(Color.white);

        /* Create a label that shows a die face */
        picture1 = new JLabel(new ImageIcon(array[x]));
        picture1.setAlignmentX(JLabel.CENTER_ALIGNMENT);
        picture1.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
        contentPane.add(picture1);

        button = new JButton("Next photo");
        button.setAlignmentX(JButton.CENTER_ALIGNMENT);
        button.addActionListener(this);
        contentPane.add(button);

        /* Add content pane to frame */
        frame.setContentPane(contentPane);

        /* Size and then display the frame. */
        frame.pack();
        frame.setVisible(true);
    }

    // ActionPerformed//
    public void actionPerformed(ActionEvent event) {
        x++;
        if (x >= array.length) {
            x = 0;
        }

        picture1.setIcon(new ImageIcon(array[x]));
    }

    // GUI//
    private static void runGUI() {
        JFrame.setDefaultLookAndFeelDecorated(true);

        SlideShow ok = new SlideShow();

    }

    public static void main(String[] args) {
        /*
         * Methods that create and show a GUI should be run from an event-dispatching
         * thread
         */
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                runGUI();
            }
        });
    }
}
0 голосов
/ 03 июня 2019

Вы инициализируете член x класса SlideShow в ноль (0) - что не нужно, так как в любом случае оно неявно инициализируется.

В методе actionPerformed у вас есть эта строка кода

x += 0;

Вы не меняете значение x.Следовательно, он остается равным нулю, и поэтому ни одно из ваших условных выражений не выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...