当前位置: 动力学知识库 > 问答 > 编程问答 >

java - How to set size for custom-made panel that will work with gridbaglayout?

问题描述:

this is my problem, I hope you will help me somehow. I have one class that extends JPanel, and that class is creating a rectangle with a paintComponent method. When I add that class to JPanel who has gridBagLayout,first is not appearing. But, when I set Dimension.getPreferredSize() in that class, I can see the rectangle...and the problem is when I call MouseListener and see that rectangle is only moving in little square in the frame. So I think that somehow that method getPreferredSize() is controlling the place where will rectangle move and be.

Here is pic of my problem:

move3

limitet showing/moving4

Here is code:

Main:

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class PrikazGUI {

JFrame frejm;

JPanel k;

JButton b1,b2;

public PrikazGUI(){

frejm = new JFrame("Lala");

k = new JPanel();

k.setLayout(new GridBagLayout());

Kvadrat l = new Kvadrat();

JPanel a = new JPanel();

a.add(l);

k.add(a);

frejm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frejm.setSize(1900, 1000);

frejm.getContentPane().add(k);

frejm.setVisible(true);

}

public static void main(String[] args) {

PrikazGUI a = new PrikazGUI();

}

Second class:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import javax.swing.JPanel;

public class KvadratPravi extends JPanel {

int sizeH = 60;

int sizeW = 60;

@Override

protected void paintComponent(Graphics g) {

// TODO Auto-generated method stub

super.paintComponent(g);

g.setColor(Color.PINK);

g.drawRect(0, 0, sizeH, sizeW);

g.fillRect(0, 0, sizeH, sizeW);

}

@Override

public Dimension getPreferredSize() {

return new Dimension(sizeH,sizeW);

}

}

Third class:

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.Point;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;

import javax.swing.JPanel;

public class Kvadrat extends JPanel {

JButton b1,b2;

JPanel panel;

KvadratPravi s1 = new KvadratPravi();

int x,y;

public Kvadrat(){

GridBagConstraints cst = new GridBagConstraints();

panel = new JPanel();

panel.setLayout(new GridBagLayout());

final KvadratPravi s = new KvadratPravi();

cst.gridx = 0;

cst.gridy = 0;

s.setPreferredSize(new Dimension(40,40));

s.setBounds(0, 0, 400, 400);

panel.add(s,cst);

JosJedanKvadrat j = new JosJedanKvadrat();

j.setPreferredSize(new Dimension(40,40));

j.setBounds(0, 0, 400, 400);

cst.gridx = 0;

cst.gridy = 4;

panel.add(j,cst);

s.setPreferredSize(new Dimension(400,400));

s.setBounds(400, 400, 400, 1000);

s.addMouseListener(new MouseAdapter() {

public void mousePressed(MouseEvent e) {

if(!e.isMetaDown()){

x = e.getX();

y = e.getY();

}

}

});

s.addMouseMotionListener(new MouseMotionAdapter() {

public void mouseDragged(MouseEvent e) {

if(!e.isMetaDown()){

Point p = s.getLocation();

s.setLocation(p.x + e.getX() - x,

p.y + e.getY() - y);

}

}

});

cst.gridx = 2;

cst.gridy =4;

panel.add(s1,cst);

JPanel k = new JPanel();

k.add(panel);

add(k);

}

}

Fourth class:

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import javax.swing.JPanel;

public class JosJedanKvadrat extends JPanel {

int sizeH = 60;

int sizeW = 60;

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.setColor(Color.BLUE);

g.drawOval(0, 0, sizeH, sizeW);

}

@Override

public Dimension getPreferredSize() {

return new Dimension(sizeH,sizeW);

}

}

分享给朋友:
您可能感兴趣的文章:
随机阅读: