我是java GUI编程的新手。
我创建了JFrame
。
在JFrame
内,我创建了JPanel
。
在JPanel
内,我创建了另一个JPanel
(我们称之为" A")。
我已经在" A"一个矩形,并希望使用图形创建按钮。
我的gui中没有矩形。我可以看到内部的paintComponent()
方法" A"没有被援引。
代码:
JPanels :(孩子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
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);
}
}
}
编辑: 谢谢大家, 我有另一个包导致问题,同一个类名。好像现在有效了。
答案 0 :(得分:2)
您应首先对JButton进行编程,以使图形作为按钮工作。我相信这篇文章会帮助你:
Creating a custom button in Java
我想要一个矩形作为按钮的背景,您可以在主面板中绘制它并在其上添加按钮。尝试使用不同的布局来保留一些订单。
答案 1 :(得分:1)
我已经制作了一个简单的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
。
答案 2 :(得分:0)
更改 MemoryButton 的类名修复了它。
我有另一个具有相同类名的包。