Trying to add image to JButton using get scaled instance

295 Views Asked by At

i am getting an error telling me that non static method addComponents ToPane(container) cannot be referenced from a static context.

i've just started programming just over two months so please bear with me.

package prototype;

    import static com.oracle.util.Checksums.update;
    import java.awt.*;
    import java.util.Locale;
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;

    public class NewClass {

        final static boolean shouldFill = true;
        final static boolean shouldWeightX = true;
        final static boolean RIGHT_TO_LEFT = false;

        public void addComponentsToPane(Container pane) {
            if (RIGHT_TO_LEFT) {

                pane.setLocale(Locale.UK);
            }

            JButton button;
            JButton buttonc;
            pane.setLayout(new GridBagLayout());
            GridBagConstraints c = new GridBagConstraints();
            if (shouldFill) {
                c.fill = GridBagConstraints.HORIZONTAL;

                pane.setLayout(new GridBagLayout());
                GridBagConstraints cc = new GridBagConstraints();
                if (shouldFill) {
                    cc.fill = GridBagConstraints.HORIZONTAL;

                }

                button = new JButton("Button 1");
                if (shouldWeightX) {
                    c.weightx = 0.5;
                }
                c.fill = GridBagConstraints.HORIZONTAL;
                c.gridx = 0;
                c.gridy = 0;
                pane.add(button, c);

                try {
                    Image i = Toolkit.getDefaultToolkit().getImage("red.JPEG");
                    Image resize = i.getScaledInstance(200, 180, java.awt.Image.SCALE_SMOOTH);
                    ImageIcon ic = new ImageIcon(resize);
                    button.setIcon(ic);

                    buttonc = new JButton("", ic);
                    cc.fill = GridBagConstraints.HORIZONTAL;
                    cc.ipady = 20;       //reset to default
                    cc.weightx = 0.0;   //request any extra vertical space
                    cc.gridx = 2;       //aligned with button 2
                    cc.gridwidth = 1;   //2 columns wide
                    cc.gridy = 2;       //third row
                    pane.add(button, ic);

                } catch (Exception e) {
                }

            }
        }

        private static void createAndShowGUI() {
            JFrame frame = new JFrame("GridBagLayoutDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            addComponentsToPane(frame.getContentPane());
            frame.pack();
            frame.setVisible(true);
        }

        public static void main(String[] args) {

            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
1

There are 1 best solutions below

1
On

The variable ic is only visible inside the scope of the try/catch block. Move the declaration of the variable out of the block

For the updated code, forget about using static methods. The code applys to a particular instance of the class so should be an instance method

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new NewClass().createAndShowGUI();
        }
    });
}