在 JFrame 中的 JPanel 中看不到 child JPanel
Can't see child JPanel in JPanel in JFrame
我创建了一个 JFrame
。
在这个 JFrame
中,我创建了一个 JPanel
。
在这个 JPanel
中,我创建了另一个 JPanel
(我们称它为“A”)。
我在“A”中画了一个矩形,想用图形创建按钮。
我的图形用户界面中没有矩形。我可以看到“A”中的 paintComponent()
方法没有被调用。
代码:
JPanels:(child JPanel
是内部 class)
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
//POSITIONING
setLayout(new BorderLayout());
//CREATE MEMORY BUTTONS
MemButton a=new MemButton();
//Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g){
Graphics2D td= (Graphics2D)g;
td.drawRect(0, 0, 20, 20);
}
}
}
您应该首先对 JButton 进行编程,以便您的图形可以用作按钮。我相信这个 post 会帮助你:
Creating a custom button in Java
如果您想要一个矩形作为按钮的背景,您可以在主面板中绘制它并在其上添加按钮。尝试使用不同的布局来维护一些秩序。
我制作了一个简单的 GUI 来测试您的代码,矩形显示正确。
我没有对您发布的代码进行任何相关更改。
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class SimpleJFrameProgram extends JFrame {
private static final long serialVersionUID = 1L;
public SimpleJFrameProgram() {
super("TEST");
initComponents();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private void initComponents() {
MemoryPanel memoryPanel = new MemoryPanel();
this.add(memoryPanel);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new SimpleJFrameProgram();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
我对您的 MemoryPanel
进行了细微更改:将 MemButton
替换为您的 MemoryButton
并将矩形填充为红色以提高其在测试中的可见性。如果没有最后的更改,矩形也会出现。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
// POSITIONING
setLayout(new BorderLayout());
// CREATE MEMORY BUTTONS
MemoryButton a = new MemoryButton();
// Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g) {
Graphics2D td = (Graphics2D) g;
td.setColor(Color.red);
td.fillRect(0, 0, 20, 20);
}
}
}
这是得到的结果:
也许您的问题出在初始化父级 JFrame
。
更改 MemoryButton 的 class 名称修复了它。
我有另一个具有相同 class 名称的包裹。
我创建了一个 JFrame
。
在这个 JFrame
中,我创建了一个 JPanel
。
在这个 JPanel
中,我创建了另一个 JPanel
(我们称它为“A”)。
我在“A”中画了一个矩形,想用图形创建按钮。
我的图形用户界面中没有矩形。我可以看到“A”中的 paintComponent()
方法没有被调用。
代码:
JPanels:(child JPanel
是内部 class)
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
//POSITIONING
setLayout(new BorderLayout());
//CREATE MEMORY BUTTONS
MemButton a=new MemButton();
//Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g){
Graphics2D td= (Graphics2D)g;
td.drawRect(0, 0, 20, 20);
}
}
}
您应该首先对 JButton 进行编程,以便您的图形可以用作按钮。我相信这个 post 会帮助你:
Creating a custom button in Java
如果您想要一个矩形作为按钮的背景,您可以在主面板中绘制它并在其上添加按钮。尝试使用不同的布局来维护一些秩序。
我制作了一个简单的 GUI 来测试您的代码,矩形显示正确。 我没有对您发布的代码进行任何相关更改。
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class SimpleJFrameProgram extends JFrame {
private static final long serialVersionUID = 1L;
public SimpleJFrameProgram() {
super("TEST");
initComponents();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private void initComponents() {
MemoryPanel memoryPanel = new MemoryPanel();
this.add(memoryPanel);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
new SimpleJFrameProgram();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
我对您的 MemoryPanel
进行了细微更改:将 MemButton
替换为您的 MemoryButton
并将矩形填充为红色以提高其在测试中的可见性。如果没有最后的更改,矩形也会出现。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class MemoryPanel extends JPanel {
public MemoryPanel(){
setPreferredSize(new Dimension(350,448));
}
@Override
public void paintComponent(Graphics g) {
// POSITIONING
setLayout(new BorderLayout());
// CREATE MEMORY BUTTONS
MemoryButton a = new MemoryButton();
// Drawing Rectangles for Memory
add(a,BorderLayout.CENTER);
}
private class MemoryButton extends JPanel{
public MemoryButton(){
setLayout(null);
setPreferredSize(new Dimension(87,40));
}
@Override
public void paintComponent(Graphics g) {
Graphics2D td = (Graphics2D) g;
td.setColor(Color.red);
td.fillRect(0, 0, 20, 20);
}
}
}
这是得到的结果:
也许您的问题出在初始化父级 JFrame
。
更改 MemoryButton 的 class 名称修复了它。
我有另一个具有相同 class 名称的包裹。