Java Graphics.drawRect未完全绘制矩形?
我正在尝试为swing创建自己的组件,但当我尝试使用drawRect绘制其边框时,它只绘制左边缘和上边缘!为什么会这样?如何修复? 以下是我的paintComponent方法:Java Graphics.drawRect未完全绘制矩形?,java,swing,Java,Swing,我正在尝试为swing创建自己的组件,但当我尝试使用drawRect绘制其边框时,它只绘制左边缘和上边缘!为什么会这样?如何修复? 以下是我的paintComponent方法: @Override protected void paintComponent(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Colo
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.red);
g.drawRect(0, 0, getWidth(), getHeight());
}
截图:
也许这将帮助您作为一个起点:
package de.professional_webworkx.graphics;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DrawFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = -1285962479945295143L;
private JPanel northPanel;
public DrawFrame() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Draw");
this.setLayout(new BorderLayout());
this.getContentPane().add(createNorthPanel(), BorderLayout.BEFORE_FIRST_LINE);
this.getContentPane().add(new DrawPanel(), BorderLayout.CENTER);
this.setSize(1024, 768);
this.setVisible(true);
}
public JPanel createNorthPanel() {
northPanel = new JPanel();
northPanel.setBackground(Color.MAGENTA);
JLabel jLabel = new JLabel("XXXXXXXXXXXX");
jLabel.setForeground(Color.WHITE);
northPanel.add(jLabel);
return northPanel;
}
public static void main(String[] args) {
new DrawFrame();
}
}
DrawPanel.class
package de.professional_webworkx.graphics;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class DrawPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 4949248244138855737L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.drawRect(10, 10, getWidth()/2, getHeight()/2);
g.setColor(Color.YELLOW);
g.fillRect(11, 11, getWidth()/2-1, getHeight()/2-1);
g.draw3DRect(10, getHeight()/2+20, 600, 280, true);
}
}
帕特里克
更新:感谢camickr。也许这将帮助您作为一个起点:
package de.professional_webworkx.graphics;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DrawFrame extends JFrame {
/**
*
*/
private static final long serialVersionUID = -1285962479945295143L;
private JPanel northPanel;
public DrawFrame() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("Draw");
this.setLayout(new BorderLayout());
this.getContentPane().add(createNorthPanel(), BorderLayout.BEFORE_FIRST_LINE);
this.getContentPane().add(new DrawPanel(), BorderLayout.CENTER);
this.setSize(1024, 768);
this.setVisible(true);
}
public JPanel createNorthPanel() {
northPanel = new JPanel();
northPanel.setBackground(Color.MAGENTA);
JLabel jLabel = new JLabel("XXXXXXXXXXXX");
jLabel.setForeground(Color.WHITE);
northPanel.add(jLabel);
return northPanel;
}
public static void main(String[] args) {
new DrawFrame();
}
}
DrawPanel.class
package de.professional_webworkx.graphics;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class DrawPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 4949248244138855737L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.drawRect(10, 10, getWidth()/2, getHeight()/2);
g.setColor(Color.YELLOW);
g.fillRect(11, 11, getWidth()/2-1, getHeight()/2-1);
g.draw3DRect(10, getHeight()/2+20, 600, 280, true);
}
}
帕特里克
更新:感谢camickr
我正在尝试为swing创建自己的组件,但当我尝试使用drawRect绘制其边框时
你为什么要划定边界。Swing支持边框。如果组件需要边框,则应使用:
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
设置顺序(新的线边框(颜色为红色))
让swing为你画边界
它只绘制左边缘和上边缘
我认为你应该使用:
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
我正在尝试为swing创建自己的组件,但当我尝试使用drawRect绘制其边框时
你为什么要划定边界。Swing支持边框。如果组件需要边框,则应使用:
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
设置顺序(新的线边框(颜色为红色))
让swing为你画边界
它只绘制左边缘和上边缘
我认为你应该使用:
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
为了更快地获得更好的帮助,请发布一个。请显示创建JFrame的类…@Andrew你是对的。为了更快地获得更好的帮助,请发布一个。请显示创建JFrame的类…@Andrew你是对的。-1,这可能很简单,但不正确。首先,自定义绘制是通过重写paintComponent()而不是paint()来完成的,其次,super.paintComponent(…)应该在方法开始时调用。-1,它可能很简单,但不正确。首先,通过重写paintComponent()而不是paint()来完成自定义绘制,其次,应该在方法的开始处调用super.paintComponent(…)。