JDialog中添加JPanel面板问题? 15
问题:自己写了两个类,DrawChessboard继承JPanel,在其中画了一个五子棋棋盘方格并添加了背景图片,PlayInterface继承JDialog,创建一个D...
问题:自己写了两个类,DrawChessboard继承JPanel,在其中画了一个五子棋棋盘方格并添加了背景图片,PlayInterface继承JDialog,创建一个DrawChessboard对象后添加到PlayInterface中,可是在对话框中只能显示一个小点,无法显示完整的棋盘方格。
这是代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DrawChessboard extends JPanel{
private Image image;
public DrawChessboard(Image image) {
this.setSize(500,500);
this.image = image;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image, 0, 0,this.getWidth(),this.getHeight(), null); //将图片画出来,实现背景图片的设置
//画19*19的棋盘
for (int i = 0; i <= 450; i = i + 25) {
g.drawLine(0, i, 450, i);
}
g.drawLine(0, 450, 450, 450);
for (int j = 0; j <= 450; j = j + 25) {
g.drawLine(j, 0, j, 450);
}
g.drawLine(450, 0, 450, 450);
//五个基准点
g.fillOval(71, 71, 8, 8);
g.fillOval(371, 71, 8, 8);
g.fillOval(71, 371, 8, 8);
g.fillOval(371, 371, 8, 8);
g.fillOval(221, 221, 8, 8);
}
}
import javax.swing.*;
import java.awt.*;
public class PlayInterface extends JDialog{
// private PersonMessage pmsg=new PersonMessage(new ImageIcon("F:/04.jpg").getImage());
private DrawChessboard dcb=new DrawChessboard(new ImageIcon("F:/运动会.jpg").getImage());
public PlayInterface(){
this.setLayout(new GridBagLayout());
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setVisible(true);
// this.add(pmsg, new GridBagConstraints(0, 1, 10, 10, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(dcb, new GridBagConstraints(1, 2, 50, 50, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
}
public static void main(String args[]){
PlayInterface pi=new PlayInterface();
pi.setSize(700,700);
}
}
affix您好,用您所提供的方法还是不行,JPanel中没有setPreferredSize(int width,int height);方法,只有setPreferredSize(Dimension preferredsize);方法。
我先Dimension size=new Dimension(500,500); 然后setPreferredSize(size);还是不行。 展开
这是代码:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DrawChessboard extends JPanel{
private Image image;
public DrawChessboard(Image image) {
this.setSize(500,500);
this.image = image;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawImage(image, 0, 0,this.getWidth(),this.getHeight(), null); //将图片画出来,实现背景图片的设置
//画19*19的棋盘
for (int i = 0; i <= 450; i = i + 25) {
g.drawLine(0, i, 450, i);
}
g.drawLine(0, 450, 450, 450);
for (int j = 0; j <= 450; j = j + 25) {
g.drawLine(j, 0, j, 450);
}
g.drawLine(450, 0, 450, 450);
//五个基准点
g.fillOval(71, 71, 8, 8);
g.fillOval(371, 71, 8, 8);
g.fillOval(71, 371, 8, 8);
g.fillOval(371, 371, 8, 8);
g.fillOval(221, 221, 8, 8);
}
}
import javax.swing.*;
import java.awt.*;
public class PlayInterface extends JDialog{
// private PersonMessage pmsg=new PersonMessage(new ImageIcon("F:/04.jpg").getImage());
private DrawChessboard dcb=new DrawChessboard(new ImageIcon("F:/运动会.jpg").getImage());
public PlayInterface(){
this.setLayout(new GridBagLayout());
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setVisible(true);
// this.add(pmsg, new GridBagConstraints(0, 1, 10, 10, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(dcb, new GridBagConstraints(1, 2, 50, 50, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
}
public static void main(String args[]){
PlayInterface pi=new PlayInterface();
pi.setSize(700,700);
}
}
affix您好,用您所提供的方法还是不行,JPanel中没有setPreferredSize(int width,int height);方法,只有setPreferredSize(Dimension preferredsize);方法。
我先Dimension size=new Dimension(500,500); 然后setPreferredSize(size);还是不行。 展开
1个回答
展开全部
GridBagLayout 使用每个JComponent的PreferredSize这个property来设定每个控件的Size。
虽然你在DrawChessBoard的“构造”里使用setSize()这个方法来设置了DrawChessBoard的Size。但是当GridBagLayout为每个空间分配空间的时候,首先读取每个控件的getPreferredSize(),来确顷罩定每个gridbag的大小。在确定好大小后在使用setSize()来改变控件的size。
而JPanel中当PreferredSize这个property没有被用户赋值的话,默认会使用MinimumSize的值.而MinimumSize默认是(0,0)。
这唤滚样DrawChessBoard就雀链闹会被GridBagLayout设置为(0.0).
你在DrawChessBoard的“构造”里, 把setSize(500,500)改为setPreferredSize(500,500)就能搞定!
虽然你在DrawChessBoard的“构造”里使用setSize()这个方法来设置了DrawChessBoard的Size。但是当GridBagLayout为每个空间分配空间的时候,首先读取每个控件的getPreferredSize(),来确顷罩定每个gridbag的大小。在确定好大小后在使用setSize()来改变控件的size。
而JPanel中当PreferredSize这个property没有被用户赋值的话,默认会使用MinimumSize的值.而MinimumSize默认是(0,0)。
这唤滚样DrawChessBoard就雀链闹会被GridBagLayout设置为(0.0).
你在DrawChessBoard的“构造”里, 把setSize(500,500)改为setPreferredSize(500,500)就能搞定!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询