我不是Java和OOP的新手,但我是新手。
我想写一个用于构建血统书的软件。这意味着:右键单击绘图区域的中间并选择" New - >曼&#34 ;.在我右键单击的位置出现一个矩形。然后我点击矩形并选择"新 - >兄弟姐妹 - >女人"并且谱系使用连接到矩形的圆圈动态扩展。你明白了。
此外,我需要为谱系的每个节点保存信息。例如基因x中的突变:阳性"。
我认为这对于OOP来说一定是完美的。我需要我的血统的每个节点都是一个将自己吸引到绘图区域的实例。那么......一个Jpanel?我扩展了JPanel,我为该类赋予了一些属性(例如" int mutationX = 1")以及将自身添加到JFrame的方法。目前我只想通过菜单在屏幕中间添加一个矩形。摇摆初学者的简单步骤。但是所需的矩形并没有显示出来。基本上我的问题是:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HelloWorld
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Hello World");
JPanel mainpanel = new JPanel();
JScrollPane scroll = new JScrollPane(mainpanel);
frame.add(scroll);
JMenuBar menubar = new JMenuBar();
frame.setJMenuBar(menubar);
JMenu file = new JMenu("File");
menubar.add(file);
JMenuItem exit = new JMenuItem("Exit");
exit.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent ae){
System.exit(0);
}
}
);
file.add(exit);
JMenuItem newMember = new JMenuItem("Add");
newMember.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent ae){
FamilyMember fm = new FamilyMember();
mainpanel.add(fm);
mainpanel.revalidate();
}
}
);
file.add(newMember);
frame.setLocation(400, 100);
frame.setPreferredSize(new Dimension(500,500));
frame.pack();
frame.setVisible(true);
}
}
public class FamilyMember extends JPanel {
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(230,80,10,10);
g.setColor(Color.RED);
g.fillRect(230,80,10,10);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(50, 50);
}
}
答案 0 :(得分:0)
对于第二点(为什么,最小值,它不起作用/显示任何矩形),您可以查看Oracle文档(从更精确到更广泛的关注):
简而言之,
你的JPanel实例mainpanel
有一个FlowLayout作为布局管理器(这是新实例的默认值)
流程布局将使用每个孩子的首选大小
并强制将FamilyMember
的首选尺寸强制为50x50
但是你只想在230,80的东南方向绘制,而不是在50x50区域。
=>它不会显示。
首先,我先说:将模型与视图分开。