Here is my code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame implements ActionListener {
private JPopupMenu popup;
private JMenuItem red, green, blue, resetBtn;
private JButton btn = new JButton("Button");
private Container c;
public Main() {
super("Test JPopupMenu");
c = getContentPane();
c.setBackground(Color.white);
// Right Click Popup Menu
popup = new JPopupMenu();
popup.add(red = new JMenuItem("Red"));
red.addActionListener(this);
popup.add(green = new JMenuItem("Green"));
green.addActionListener(this);
popup.add(blue = new JMenuItem("Blue"));
blue.addActionListener(this);
popup.addSeparator();
popup.add(resetBtn = new JMenuItem("Reset"));
resetBtn.addActionListener(this);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt) {
if ( evt.isPopupTrigger() ) {
popup.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
public void mouseReleased(MouseEvent evt){
if ( evt.isPopupTrigger() ) {
popup.show(evt.getComponent(), evt.getX(), evt.getY());
}
}
});
JPanel jpane = new JPanel();
jpane.add(btn);
c.add(jpane);
}
public void actionPerformed(ActionEvent evt) {
if ( evt.getSource() == btn ) {
JOptionPane.showMessageDialog(null, "You pressed the button!");
}
if ( evt.getSource() == red ) {
c.setBackground(Color.red);
}
if ( evt.getSource() == green ) {
c.setBackground(Color.green);
}
if ( evt.getSource() == blue ) {
c.setBackground(Color.blue);
}
if ( evt.getSource() == resetBtn ) {
c.setBackground(Color.white);
}
repaint();
}
public static void main(String[] args) {
Main app = new Main();
app.setDefaultCloseOperation(EXIT_ON_CLOSE);
app.setSize(300,300);
app.setVisible(true);
app.setResizable(false);
}
}
The jpanel covers the whole jframe of mine. What can I do to make it only cover the top-left 200px square? I tried setSize for the jpanel but it doesn't works. How can I solve it?
Any help will be appreciated. Thanks for your help.