Callum S
Callum S

Reputation: 221

Strange rendering issue with Java Swing library

Background

I want to create a GUI application using the java swing library. For layout I require it to be a GridLayout as the program outline requires this.

Aim

To render a panel with text inside it.

What I have tried

Code:

public class MainPanel extends JPanel {
    public MainPanel(JFrame frame) {
        setBounds(40,40,200,200);
        setBackground(Color.BLUE);

        JLabel label = new JLabel("Hello World", SwingConstants.CENTER);
        label.setFont(new Font("Tahoma", Font.PLAIN, 25));
        label.setVisible(true);
        add(label);

        setLayout(new GridLayout(1, 1));
    }
}

Result
enter image description here

Conclusion As you can see, the panel does render (the blue square), however there is no text inside of it. I'm rather confused as code very similar to this has worked on aother project, and there is no obvious reason this shouldn't work.

Upvotes: 0

Views: 38

Answers (1)

g00se
g00se

Reputation: 4292

Your code is essentially OK with the provisos I mentioned. Proof: (obviously you can separate out your own class as a top level one later):

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;


public class F extends JFrame {
    private void setGui() {
        try {
            setLocation(0, 100);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setContentPane(new MainPanel());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        try {
            EventQueue.invokeAndWait(() -> {
                F f = new F();
                f.setGui();
                f.setSize(200, 200);
                f.setVisible(true);
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
class MainPanel extends JPanel {
    public MainPanel() {
        setLayout(new GridLayout(1, 1));
        setBounds(40,40,200,200);
        setBackground(Color.BLUE);
        JLabel label = new JLabel("Hello World", SwingConstants.CENTER);
        label.setFont(new Font("Tahoma", Font.PLAIN, 25));
        add(label);
    }

}

Upvotes: 0

Related Questions