java-如何将网格线绘制为JPanel上的背景
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何将网格线绘制为JPanel上的背景,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2998字,纯文字阅读大概需要5分钟。
内容图文
![java-如何将网格线绘制为JPanel上的背景](/upload/InfoBanner/zyjiaocheng/651/b42457eef8f44999980189640a15d99a.jpg)
我有个问题.我在JFrame中使用了Gridbaglayout.组件之一是JPanel.
我想画一条网格线作为JPanel的背景.例如,在下面的程序中,它应该产生3条垂直线和3条水平线,但是只显示2条垂直线和2条水平线.最后一行未显示.
另一个问题是,JPanel的大小似乎比我设置的要大.我注意到这比行长比JPanel白色背景短.
public class drawLayout extends JComponent
{
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
public int getY() {
return 0;
}
public int getX() {
return 0;
}
@Override public void paintComponent(Graphics g)
{
g.setPaint(Color.GRAY);
for (int i = 0; i <= getSize().width; i += 300)
{
g2.drawLine(i, 0, i, getSize().height);
}
for (int i = 0; i <= getSize().height; i += 300)
{
g2.drawLine(0,i, getSize().width, i);
}
}
}
编辑:
http://www.freeimagehosting.net/image.php?1af16edc28.jpg
解决了第一个问题(网格线显示在JPanel上).
另一个问题使我感到困惑.正如您在所附图像上所看到的,当查看网格的长度(标记为红色框)时,JPanel的大小似乎大于600.如何解决这个问题,使网格线背景看起来不错,而网格线外没有任何多余的空白?
解决方法:
如果JPanel的大小为600,则其可用坐标仅从0到599.将不会绘制600处的线.
同样,任何边界和/或插图都会进一步减少可用空间.
更新:我花了一些时间,所以我编写了您的应用程序.希望您会找到一些有用的提示.
public class Jessy extends JFrame {
private static final int DRAWING_SIZE = 600;
private static final int SUBDIVISIONS = 2;
private static final int SUBDIVISION_SIZE = DRAWING_SIZE / SUBDIVISIONS;
public Jessy() {
setSize(800, 800);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.gridx = 0;
gbc.gridy = 0;
JLabel drawingBoard = new JLabel("Drawing Board");
gbc.anchor = GridBagConstraints.SOUTH;
drawingBoard.setFont(new Font("Serif", Font.BOLD, 28));
add(drawingBoard, gbc);
JPanel panel = new JPanel() {
@Override public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.GRAY);
for (int i = 1; i < SUBDIVISIONS; i++) {
int x = i * SUBDIVISION_SIZE;
g2.drawLine(x, 0, x, getSize().height);
}
for (int i = 1; i < SUBDIVISIONS; i++) {
int y = i * SUBDIVISION_SIZE;
g2.drawLine(0, y, getSize().width, y);
}
}
};
panel.setPreferredSize(new Dimension(DRAWING_SIZE, DRAWING_SIZE));
panel.setBackground(Color.WHITE);
panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
gbc.gridy++;
gbc.anchor = GridBagConstraints.CENTER;
add(panel, gbc);
JButton saveDrawing = new JButton("SAVE DRAWING");
gbc.gridy++;
gbc.anchor = GridBagConstraints.NORTH;
add(saveDrawing, gbc);
}
public static void main(String[] args) {
(new Jessy()).setVisible(true);
}
}
一些细节:
>我为外线使用了边框,这为我们省去了“ 599”的麻烦.
>我假设您想要在内部细分网格,所以我添加了一些管道以使其灵活且可配置.
>我注意到您的paintComponents()不调用super.paintComponents().这应该!
>我使用我认为是指定网格袋约束的最低要求编码.更少的编码=更少的错误:??)
>我将JPanel(根据您的编写)子类化,而不是JComponent(根据您的代码中的内容)子类化.区别似乎在于JComponent无法绘制其背景,因此最终变成灰色.
>也许最重要的是,我使用kruler测量了我的GUI:两种方式的图形组件大小正好是600!
内容总结
以上是互联网集市为您收集整理的java-如何将网格线绘制为JPanel上的背景全部内容,希望文章能够帮你解决java-如何将网格线绘制为JPanel上的背景所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。