Java 我的形状上没有显示J组件?
我遇到了一个非常大的问题,当我创建一个JLabel、Jbutton等等…它可以在屏幕上显示,但是当我想把它们放在一个矩形上时,它消失了,而这个矩形只显示出来 使用JLabel时,我选择使用drawstring,但现在我不得不尝试使用JTextField。我不知道我错过了什么Java 我的形状上没有显示J组件?,java,swing,user-interface,jbutton,jlabel,Java,Swing,User Interface,Jbutton,Jlabel,我遇到了一个非常大的问题,当我创建一个JLabel、Jbutton等等…它可以在屏幕上显示,但是当我想把它们放在一个矩形上时,它消失了,而这个矩形只显示出来 使用JLabel时,我选择使用drawstring,但现在我不得不尝试使用JTextField。我不知道我错过了什么 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.lang.*; import javax.swing.event.*
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);
}
}
不要重写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);
}
}
这一切都在以下章节中解释:
公共空间涂料(图g)
油漆容器。这会将油漆转发到此容器的子级的任何轻型组件。如果重新实现此方法,则应调用super.paint(g),以便正确渲染轻量级组件
您不应该将
paint()
与JFrame
一起使用,因为最好在JPanel
上使用paintComponent()
,然后将其添加到JFrame
在paintComponent()
中,调用super.paintComponent()
来准备要绘制的绘图面。函数是绘制组件的函数,它满足于按显示顺序调用以下三个函数:
:这一个用于绘制组件,例如:背景受保护的void paintComponent(图形g)
:该图形绘制组件的边框受保护的void paintBorder(图形g)
:该图形绘制其中组件的子级受保护的void paintChildren(图形g)
paint(Graphics g)
函数来绘制的任何内容,都应该按照它们在paint()函数中出现的顺序调用这些函数。调用super.paint(g)
将起作用,因为它正在调用容器的超类(JComponent
class)paint()
函数,该函数已经在调用这三个函数
但是:为什么要覆盖这个paint()
函数来进行自定义绘制呢!通过创建扩展JComponent或JPanel的自定义组件来放置自定义绘制代码,并通过重写来实现paintComponent()
函数,不要忘记调用super.paintComponent()
。如果需要将此自定义组件作为框架的内容窗格:只需设置此窗格frame.setContentPane(customPane)
签出是,因为您的代码片段只添加了一个文本框,您还希望它显示什么?JFrame没有paintComponent()方法。您应该创建一个JPanel,将组件添加到此面板,并重写面板的paintComponent()方法。并将此面板添加到框架中。另外,始终将@Override注释添加到应该重写基类/接口中的方法的方法中。如果更改字符串的坐标,则会出现该注释。你明白了,现在你的工作就是使用它来了解它如何满足你的需要。@jbnize这不是我所做的吗?@Bobski将字符串的坐标更改为220 400,你会看到:)