Java 扩展JPanel在添加到另一个JPanel时显示为微小
我试图将2个扩展的JPanel添加到JPanel或JFrame中,但即使我设置了一个大小,它们都显示得非常小。代码如下Java 扩展JPanel在添加到另一个JPanel时显示为微小,java,swing,user-interface,jpanel,graphics2d,Java,Swing,User Interface,Jpanel,Graphics2d,我试图将2个扩展的JPanel添加到JPanel或JFrame中,但即使我设置了一个大小,它们都显示得非常小。代码如下
导入java.awt.AlphaComposite;
导入java.awt.BasicStroke;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Point;
导入java.awt.Polygon;
导入java.awt.Toolkit;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.geom.Arc2D;
导入java.awt.geom.Line2D;
导入java.awt.geom.QuadCurve2D;
导入java.awt.image.buffereImage;
导入javax.swing.BorderFactory;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.border.border;
公共类tile扩展JPanel实现MouseListener{
私有字符串[]tilePath=新字符串[3];
私有颜色[]tileColors=新颜色[3];
私有整数x=100,y=100;
公共磁贴(字符串[]路径,颜色[]颜色){
瓷砖路径=路径;
tileColors=颜色;
addMouseListener(这个);
}
公共组件(图形g){
超级组件(g);
BuffereImage tileImage=新的BuffereImage(100100,BuffereImage.TYPE_INT_ARGB);
Graphics2D tile=tileImage.createGraphics();
int-edgeLength=tileImage.getWidth()/2;
多边形六边形=新多边形();
点[]顶点=新点[6];
对于(int i=0;i<6;i++)
{vertex[i]=新点((int)(edgeLength+edgeLength*Math.cos(i*2*Math.PI/6)),(int)(edgeLength+edgeLength*Math.sin(i*2*Math.PI/6));
添加点(顶点[i].x,顶点[i].y);
}
瓷砖。设置颜色(颜色。黑色);
瓷砖。填充多边形(六边形);
setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN));
调整行程(新基本行程(10));
int vertexIndex=0;
对于(int i=0;i每个面板都应该覆盖getPreferredSize()
以返回一个合理的值。这是布局管理器最可能遵循的值
另见(是)
例如
import java.awt.*;
导入java.awt.event.*;
导入java.awt.geom.*;
导入java.awt.image.buffereImage;
导入javax.swing.*;
导入javax.swing.border.border;
公开庭审{
公共静态void main(字符串参数[]){
JFrame窗口=新JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content=新的JPanel();
content.setLayout(新的FlowLayout(FlowLayout.LEFT));
内容.背景(颜色.黑色);
tile t1=新tile(新字符串[]{“弧”、“曲线”、“曲线”},新颜色[]{Color.GREEN、Color.RED、Color.YELLOW});
内容。添加(t1);
添加(新网格模型((0.7*1000)/21));
添加(内容);
window.pack();
window.setVisible(true);
}
}
类tile扩展JPanel实现MouseListener{
私有字符串[]tilePath=新字符串[3];
私有颜色[]tileColors=新颜色[3];
私有整数x=100,y=100;
公共磁贴(字符串[]路径,颜色[]颜色){
瓷砖路径=路径;
tileColors=颜色;
addMouseListener(这个);
}
公共组件(图形g){
超级组件(g);
BuffereImage tileImage=新的BuffereImage(100100,BuffereImage.TYPE_INT_ARGB);
Graphics2D tile=tileImage.createGraphics();
int-edgeLength=tileImage.getWidth()/2;
多边形六边形=新多边形();
点[]顶点=新点[6];
对于(int i=0;i<6;i++){
顶点[i]=新点((int)(边长+边长*数学cos(i*2*数学PI/6)),(int)(边长+边长*数学sin(i*2*数学PI/6));
添加点(顶点[i].x,顶点[i].y);
}
瓷砖。设置颜色(颜色。黑色);
瓷砖。填充多边形(六边形);
setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN));
调整行程(新基本行程(10));
int vertexIndex=0;
对于(int i=0;i<3;i++){
if(tilePath[i]=“弧”){
Arc2D.Double弧=新的Arc2D.Double();
arc.setArcByCenter(顶点[vertexIndex].x,顶点[vertexIndex].y,边长度/2,0,360,Arc2D.OPEN);
瓷砖颜色(瓷砖颜色[i]);
瓷砖。绘制(圆弧);
vertexIndex++;
}else if(波浪路径[i]=“曲线”){
点中点1=新点((顶点[vertexIndex].x+顶点[vertexIndex+1].x)/2,(顶点[vertexIndex].y+顶点[vertexIndex+1].y)/2);
点中点2=新点((顶点[vertexIndex+2].x+顶点[vertexIndex+3].x)/2,(顶点[vertexIndex+2].y+顶点[vertexIndex+3].y)/2);
瓷砖颜色(瓷砖颜色[i]);
平铺绘制(新的四边形曲线2d.Float(中点1.x,中点1.y,边长,边长,中点2.x,中点2.y));
vertexIndex++;
}否则{
点中点1=新点((顶点[vertexIndex].x+顶点[vertexIndex+1].x)/2,(顶点[vertexIndex].y+顶点[vertexIndex+1].y)/2);
点中点2=新点((顶点[vertexIndex+3].x+顶点[vertexIndex+4].x)/2,(顶点[vertexIndex+3].y+顶点[vertexIndex+4].y)/2);
瓷砖颜色(瓷砖颜色[i]);
绘制(新的Line2D.Float(midPoint1.x,midPoint1.y,midPoint2.x,midPoint2.y));
vertexIndex++;
}
}
Graphics2D FinishedFile=(Graphics2D)g;
Border Border=BorderFactory.createLineBorder(Color.BLUE);
FinishedFile.drawImage(tileImage,x,y,null);
}
@凌驾
公共void mouseClicked(MouseEvent事件){
//TODO自动生成的方法存根
System.out.println(“单击”);
x=event.getX();
y=event.getY();
重新油漆();
}
@凌驾
公共无效鼠标事件(鼠标事件){
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class trial {
public static void main(String args[]){
JFrame window=new JFrame();
window.setSize(1900, 800);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content=new JPanel();
content.setLayout(new FlowLayout(FlowLayout.LEFT));
content.setBackground(Color.BLACK);
tile t1=new tile(new String[]{"arc","curve", "curve"}, new Color[]{Color.GREEN, Color.RED, Color.YELLOW});
//t1.setSize(100, 100);
content.add(t1);
content.add(new gridModel((0.7*1000)/21));
window.add(content);
//window.add(new gridModel((0.7*1000)/21));
//window.add(new tile(new String[]{"arc","curve", "curve"}, new Color[]{Color.GREEN, Color.RED, Color.YELLOW}));
//window.pack();
window.setVisible(true);
}
}
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Arc2D;
import java.awt.geom.Line2D;
import java.awt.geom.QuadCurve2D;
import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.Border;
public class tile extends JPanel implements MouseListener{
private String[] tilePaths=new String[3];
private Color[] tileColors=new Color[3];
private int x=100, y=100;
public tile(String[] paths, Color[] colors){
tilePaths=paths;
tileColors=colors;
addMouseListener(this);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
BufferedImage tileImage=new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D tile=tileImage.createGraphics();
int edgeLength=tileImage.getWidth()/2;
Polygon hexagon = new Polygon();
Point[] vertex=new Point[6];
for (int i = 0; i < 6; i++)
{ vertex[i]=new Point((int) (edgeLength+ edgeLength*Math.cos(i * 2 * Math.PI / 6)), (int) (edgeLength+ edgeLength*Math.sin(i * 2 * Math.PI / 6)));
hexagon.addPoint(vertex[i].x, vertex[i].y);
}
tile.setColor(Color.black);
tile.fillPolygon(hexagon);
tile.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN));
tile.setStroke(new BasicStroke(10));
int vertexIndex=0;
for(int i=0; i<3; i++)
{ if(tilePaths[i]=="arc")
{ Arc2D.Double arc=new Arc2D.Double();
arc.setArcByCenter(vertex[vertexIndex].x, vertex[vertexIndex].y, edgeLength/2, 0, 360, Arc2D.OPEN);
tile.setColor(tileColors[i]);
tile.draw(arc);
vertexIndex++;
}
else if(tilePaths[i]=="curve")
{ Point midPoint1=new Point((vertex[vertexIndex].x+vertex[vertexIndex+1].x)/2, (vertex[vertexIndex].y+vertex[vertexIndex+1].y)/2);
Point midPoint2=new Point((vertex[vertexIndex+2].x+vertex[vertexIndex+3].x)/2, (vertex[vertexIndex+2].y+vertex[vertexIndex+3].y)/2);
tile.setColor(tileColors[i]);
tile.draw(new QuadCurve2D.Float(midPoint1.x, midPoint1.y, edgeLength, edgeLength, midPoint2.x, midPoint2.y));
vertexIndex++;
}
else
{ Point midPoint1=new Point((vertex[vertexIndex].x+vertex[vertexIndex+1].x)/2, (vertex[vertexIndex].y+vertex[vertexIndex+1].y)/2);
Point midPoint2=new Point((vertex[vertexIndex+3].x+vertex[vertexIndex+4].x)/2, (vertex[vertexIndex+3].y+vertex[vertexIndex+4].y)/2);
tile.setColor(tileColors[i]);
tile.draw(new Line2D.Float(midPoint1.x, midPoint1.y, midPoint2.x, midPoint2.y));
vertexIndex++;
}
}
Graphics2D finishedTile=(Graphics2D) g;
Border border = BorderFactory.createLineBorder(Color.BLUE);
finishedTile.drawImage(tileImage, x, y, null);
}
@Override
public void mouseClicked(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Click");
x=event.getX();
y=event.getY();
repaint();
}
@Override
public void mouseEntered(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Entered");
}
@Override
public void mouseExited(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Exited");
}
@Override
public void mousePressed(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Pressed");
}
@Override
public void mouseReleased(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Released");
}
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Toolkit;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class gridModel extends JPanel{
private double sideLength;
public gridModel(double hexagonSide){
sideLength=hexagonSide;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
double fromLeft=0, fromTop=sideLength;
for (int i=0; i<14; i++){
if(i%2==0)
{ fromLeft=sideLength;
}
else
{ fromLeft=(2.5)*sideLength;
}
for(int j=0; j<7; j++){
Polygon hexagon = buildHexagon(fromLeft, fromTop);
g2.setColor(Color.green);
g2.drawPolygon(hexagon);
fromLeft+=3*sideLength;
}
fromTop+=0.865*sideLength;
}
}
private Polygon buildHexagon(double leftMargin, double topMargin){
Polygon hexagon = new Polygon();
for (int i=0; i<6; i++){
hexagon.addPoint((int) (leftMargin+ sideLength*Math.cos(i*2*Math.PI/6)), (int) (topMargin+ sideLength*Math.sin(i*2*Math.PI/6)));
}
return hexagon;
}
/*public static void main(String args[]){
JFrame window=new JFrame();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
window.setSize(screenSize.width, screenSize.height);
window.add(new gridModel((0.7*screenSize.width)/21));
window.setVisible(true);
}*/
}
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.Border;
public class trial {
public static void main(String args[]) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel content = new JPanel();
content.setLayout(new FlowLayout(FlowLayout.LEFT));
content.setBackground(Color.BLACK);
tile t1 = new tile(new String[]{"arc", "curve", "curve"}, new Color[]{Color.GREEN, Color.RED, Color.YELLOW});
content.add(t1);
content.add(new gridModel((0.7 * 1000) / 21));
window.add(content);
window.pack();
window.setVisible(true);
}
}
class tile extends JPanel implements MouseListener {
private String[] tilePaths = new String[3];
private Color[] tileColors = new Color[3];
private int x = 100, y = 100;
public tile(String[] paths, Color[] colors) {
tilePaths = paths;
tileColors = colors;
addMouseListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
BufferedImage tileImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D tile = tileImage.createGraphics();
int edgeLength = tileImage.getWidth() / 2;
Polygon hexagon = new Polygon();
Point[] vertex = new Point[6];
for (int i = 0; i < 6; i++) {
vertex[i] = new Point((int) (edgeLength + edgeLength * Math.cos(i * 2 * Math.PI / 6)), (int) (edgeLength + edgeLength * Math.sin(i * 2 * Math.PI / 6)));
hexagon.addPoint(vertex[i].x, vertex[i].y);
}
tile.setColor(Color.black);
tile.fillPolygon(hexagon);
tile.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN));
tile.setStroke(new BasicStroke(10));
int vertexIndex = 0;
for (int i = 0; i < 3; i++) {
if (tilePaths[i] == "arc") {
Arc2D.Double arc = new Arc2D.Double();
arc.setArcByCenter(vertex[vertexIndex].x, vertex[vertexIndex].y, edgeLength / 2, 0, 360, Arc2D.OPEN);
tile.setColor(tileColors[i]);
tile.draw(arc);
vertexIndex++;
} else if (tilePaths[i] == "curve") {
Point midPoint1 = new Point((vertex[vertexIndex].x + vertex[vertexIndex + 1].x) / 2, (vertex[vertexIndex].y + vertex[vertexIndex + 1].y) / 2);
Point midPoint2 = new Point((vertex[vertexIndex + 2].x + vertex[vertexIndex + 3].x) / 2, (vertex[vertexIndex + 2].y + vertex[vertexIndex + 3].y) / 2);
tile.setColor(tileColors[i]);
tile.draw(new QuadCurve2D.Float(midPoint1.x, midPoint1.y, edgeLength, edgeLength, midPoint2.x, midPoint2.y));
vertexIndex++;
} else {
Point midPoint1 = new Point((vertex[vertexIndex].x + vertex[vertexIndex + 1].x) / 2, (vertex[vertexIndex].y + vertex[vertexIndex + 1].y) / 2);
Point midPoint2 = new Point((vertex[vertexIndex + 3].x + vertex[vertexIndex + 4].x) / 2, (vertex[vertexIndex + 3].y + vertex[vertexIndex + 4].y) / 2);
tile.setColor(tileColors[i]);
tile.draw(new Line2D.Float(midPoint1.x, midPoint1.y, midPoint2.x, midPoint2.y));
vertexIndex++;
}
}
Graphics2D finishedTile = (Graphics2D) g;
Border border = BorderFactory.createLineBorder(Color.BLUE);
finishedTile.drawImage(tileImage, x, y, null);
}
@Override
public void mouseClicked(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Click");
x = event.getX();
y = event.getY();
repaint();
}
@Override
public void mouseEntered(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Entered");
}
@Override
public void mouseExited(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Exited");
}
@Override
public void mousePressed(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Pressed");
}
@Override
public void mouseReleased(MouseEvent event) {
// TODO Auto-generated method stub
System.out.println("Released");
}
@Override
public Dimension getPreferredSize() {
return new Dimension(2*x, 2*y);
}
}
class gridModel extends JPanel {
private double sideLength;
@Override
public Dimension getPreferredSize() {
return new Dimension(2*(int)sideLength, 2*(int)sideLength);
}
public gridModel(double hexagonSide) {
sideLength = hexagonSide;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
double fromLeft = 0, fromTop = sideLength;
for (int i = 0; i < 14; i++) {
if (i % 2 == 0) {
fromLeft = sideLength;
} else {
fromLeft = (2.5) * sideLength;
}
for (int j = 0; j < 7; j++) {
Polygon hexagon = buildHexagon(fromLeft, fromTop);
g2.setColor(Color.green);
g2.drawPolygon(hexagon);
fromLeft += 3 * sideLength;
}
fromTop += 0.865 * sideLength;
}
}
private Polygon buildHexagon(double leftMargin, double topMargin) {
Polygon hexagon = new Polygon();
for (int i = 0; i < 6; i++) {
hexagon.addPoint((int) (leftMargin + sideLength * Math.cos(i * 2 * Math.PI / 6)), (int) (topMargin + sideLength * Math.sin(i * 2 * Math.PI / 6)));
}
return hexagon;
}
}