Java swing按钮没有';t添加新的容器组件
我有以下swing应用程序。问题是,我希望单击按钮操作将新组件添加到容器c中。每当在构造函数中单独调用方法Java swing按钮没有';t添加新的容器组件,java,swing,Java,Swing,我有以下swing应用程序。问题是,我希望单击按钮操作将新组件添加到容器c中。每当在构造函数中单独调用方法AddGraph()时,就会添加图表。但是,如果我在actionPerformed()中调用它,则不会添加图表。 我已尝试使AddGraph()返回图表对象,然后将其添加到actionPerformed()中,但仍然不起作用。这应该是一些非常基本的东西,但我找不到正确的方法来做 public class MainFrame extends JFrame { ChartPan
AddGraph()
时,就会添加图表。但是,如果我在actionPerformed()
中调用它,则不会添加图表。
我已尝试使AddGraph()
返回图表对象,然后将其添加到actionPerformed()
中,但仍然不起作用。这应该是一些非常基本的东西,但我找不到正确的方法来做
public class MainFrame extends JFrame {
ChartPanel chartPanel;
public MainFrame(String title)
{
super(title);
// Set layout manager
setLayout(new BorderLayout());
// Create Swing components
JButton button = new JButton("Click me");
// Add swing components to content pane
final Container c = getContentPane();
c.add(button, BorderLayout.SOUTH);
AddGraph(c);
// button behaviour here
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//AddGraph(c);
}
});
}
public void AddGraph(Container c)
{
.
.
.
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
c.add(chartPanel, BorderLayout.CENTER);
}
}
将
容器
的对象,即构造函数中的c
公开,并在c
中添加图表面板
public void AddGraph(){
.
.
.
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
// Container c = getContentPane();
c.add(chartPanel, BorderLayout.CENTER);
}
AddGraph应该是这样的:
public void AddGraph(Container c)
{
.
.
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
c.add(chartPanel, BorderLayout.CENTER);
}
然后在构造函数中,您可以像这样调用它:
AddGraph(c);
您不应该将组件添加到容器中吗?我没有看到你在任何地方这样做。您的
AddGraph
方法应该将容器作为参数,但我看到您创建了一个新的容器,它与MainFrame
构造函数中的容器不同。我已将此添加c作为参数更改为AddGraph,结果仍然相同-在按钮事件外调用时工作,在调用时不工作内部…@user3259222:在actionPerformed
方法中添加charPanel
后,是否尝试调用frame.validate()和frame.repaint()
JFrame
默认布局为BorderLayout
无需显式设置。如果将组件添加到JPanel
中,然后将此JPanel
设置为JFrame
的内容窗格,而不是直接将组件添加到顶层容器中,这将允许在另一个视图中再次重用相同的代码,这将是明智的做法。我尝试了,但仍然无法工作。同样的结果:在构造函数中调用AddGraph(c)有效,在按钮事件中调用它无效。如果@nIcEcOw所说的不起作用,请尝试创建一个返回ChartPanel
的方法,然后在actionPerformed集合内容窗格中使用setContentPane(ChartPanel)
。您还可以选择在构造函数中创建整个ChartPanel对象。