Altiano Gerung
Altiano Gerung

Reputation: 854

How to add 1 drawing with a button to JFrame ?

My drawing class: for example I just want to draw a simple line

public class DrawNot1 extends JPanel {

private BasicStroke BS = new BasicStroke(2);
private int x;
private int y;

public DrawNot1(int x, int y){
    setSize(100, 100);
    this.x = x;
    this.y = y;
}

@Override
protected void paintComponent(Graphics g){               
    super.paintComponent(g);
    doDrawing(g);
}

private void doDrawing(Graphics g){
    Graphics2D g2d = (Graphics2D) g;
    g2d.setStroke(BS);

    g2d.drawLine(x, y, x, y+10);

}

my JFrame class:

public class Main extends JFrame{

private int x;
private int y;

public Main() {
    initUI();
}

public void initUI() {
    setSize(600, 500);
    setTitle("Points");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(new DrawNot1(20, 20));
    add(new JButton("button1"));
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            Main ex = new Main();
            ex.setVisible(true);
        }
    });
}

}

I want to show my drawing next to the button but that doesn't appear the only component that appear is the button, my drawing does not.

My ultimate goal is when I press the button my drawing is appear near the button.

Upvotes: 1

Views: 201

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347332

JFrame uses a BorderLayout by default, adding two components to the default (CENTRE) position means that only the last one added will be shown.

Try adding the button to the SOUTH position instead

add(new JButton("button1"), BorderLayout.SOUTH);

You may also find the overriding the getPreferredSize method of DrawDot1 and providing a suitable value will also result in a better output

Upvotes: 2

Related Questions