我有一个非常大的问题,其中当我创建一个JLabel,Jbutton等等......它可以在屏幕上显示,但是当我想将它们放在一个矩形上时它会消失并且矩形只显示?
使用JLabel我选择使用抽绳,但现在我仍然试图让JTextField开启。我不知道我错过了什么。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.event.*;
class main
{
public static void main (String Args [])
{
GUIwindow guiW = new GUIwindow();
}
}
class GUIwindow extends JFrame
{
JPanel grid = new JPanel();
JTextArea screenArea = new JTextArea("", 10, 20);
JScrollPane scrollBar = new JScrollPane(screenArea);
GUIwindow()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,800);
setTitle("Title here");
setLocationRelativeTo(null);
screenArea.setLineWrap(true);
screenArea.setEditable(false);
grid.add(scrollBar);
add(grid);
setVisible(true);
}
public void paint (Graphics g)
{
g.setColor(Color.decode("#0232ac"));
g.fillRoundRect(100, 50, 300, 600, 50, 50);
g.setColor(Color.white);
g.drawString("TitleonRect", 220, 80);
}
}
答案 0 :(得分:1)
不要覆盖JFrame的方法paint()
。
覆盖元素的方法paintComponent()
。
如果您是JPanel的子类,则可以覆盖其paintComponent
方法:
class GridPanel extends JPanel {
GridPanel() {
super();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.decode("#0232ac"));
g.fillRoundRect(100, 50, 300, 600, 50, 50);
g.setColor(Color.white);
g.drawString("TitleonRect", 220, 80);
}
}
答案 1 :(得分:1)
paint(Graphics g)
函数是绘制组件的函数,它的内容是按照它们出现的顺序调用三个函数:
protected void paintComponent(Graphics g)
:这个画出你的组件,例如:背景protected void paintBorder(Graphics g)
:这个描绘了组件的边框protected void paintChildren(Graphics g)
:这个描绘了其中组件的子项因此,通过覆盖paint(Graphics g)
函数绘制的任何内容,您应该将这些函数与它们在paint()
函数中出现的顺序一起调用。调用super.paint(g)
将起作用,因为它正在调用容器的超类(JComponent
类)的paint()
函数,该函数已经调用了这三个函数。
但是:你为什么要覆盖这个paint()
函数来进行自定义绘画!通过创建扩展JComponent or JPanel
的自定义组件并通过覆盖它来实现paintComponent()
功能来放置您的自定义绘图代码,并且不要忘记调用super.paintComponent()
。如果您需要将此自定义组件作为框架的内容窗格:只需设置此窗格frame.setContentPane(customPane)
;
答案 2 :(得分:0)
所有这些都在the javadoc中解释:
public void paint(Graphics g)
涂抹容器。这会将paint转发给任何属于此容器子级的轻量级组件。如果重新实现此方法,则应调用super.paint(g)以便正确呈现轻量级组件。
答案 3 :(得分:0)
您不应将paint()
与JFrame
一起使用,因为最好在paintComponent()
上使用JPanel
,然后将其添加到JFrame
。
在paintComponent()
调用super.paintComponent()
中准备要绘制的绘图表面。