使用GridBagConstraints添加Graphics JComponent

时间:2014-06-01 23:06:47

标签: java swing gridbaglayout

我正在寻找一种方法来放置一个使用Graphics的JComponent以及其他JComponents,例如JRadioButton。

因此,我尝试在我的JPanel中构建GridBagConstraints以便于放置。但我无法弄清楚如何使用正确的约束将图形组件放置在网格上。如果我添加约束,则会出现一小部分图形。

我的代码如下:

public class Interface extends JFrame{
    private Visualization v;
    private GridBagConstraints constraints=new GridBagConstraints();
    private JRadioButton temperature,pluviometry;

    public Interface(Visualization v){
        this.setTitle("Pluviometry Data Viewer");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.v=v;

        //this.getContentPane().add(v);
        //this.getContentPane().setLayout(new GridBagLayout());
        constraints.gridx=0;
        constraints.gridy=0;
        constraints.gridheight=(int)v.getPreferredSize().getSize().getHeight();
        constraints.gridwidth=(int)v.getPreferredSize().getSize().getWidth();
        //constraints.fill=BOTH;

        this.add(v);
        //this.add(new JRadioButton("Temperature", true),constraints);
        this.setVisible(true);
        this.pack();
       this.setSize(new Dimension(540, 360));
    }
}


public class Visualization extends JComponent {
    Data data;

    private int y_axis=210;
    private int x_axis=450;
    public Visualization(Data d){
        this.data=d;
    }

    @Override
    public void paintComponent(Graphics g){
        int width=getWidth();
        int height=getHeight();

        g.setColor(new Color(255, 78, 23));
        g.drawLine(50, 20, 50, 230);
        g.drawLine(50, 230, 500, 230);
        for(int i=100;i<=500;i+=50){
            g.drawLine(i, 230, i, 240);
        }
        for(int i=180;i>0;i-=40){
            g.drawLine(50, i, 40, i);
        }
    }

    @Override
    public Dimension getPreferredSize(){
        return new Dimension(200,100);
    }
}

感谢。

1 个答案:

答案 0 :(得分:1)

有很多小问题......

  1. 您实际上从未使用GridBagLayout
  2. 添加GridBagConstraints
  3. 时,您永远不会向容器提供Visualization
  4. preferredSize的{​​{1}}与您实际渲染的内容不匹配
  5. 一旦建立了用户界面
  6. ,您应该尝试最后拨打Visualization
  7. 强烈建议在setVisible上致电setSize
  8. JFramegridwidth是在gridheight上下文中的单元格中测量的,而不是像素......
  9. 例如......

    enter image description here

    GridBagLayout