问题很简单。单击一个按钮将添加另一个按钮。这也有效。但是只有一次,我希望每次单击时在上一个按钮的下方添加另一个按钮。
你能告诉我问题出在哪里吗?
这是我已经尝试过的: 不同的布局,因为我假设按钮彼此重叠。 “ GUI刷新”,因为我认为单击后应该更新界面...,但是它不起作用。 在我的最后一次尝试中,每次单击时,我都创建了该类的一个新对象。不幸的是,它也不起作用。
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MVCView();
}
});
}
}
public class MVCView extends JFrame {
private static final long serialVersionUID = 1L;
public MVCView() {
init();
}
private void init() {
BorderLayout bl = new BorderLayout();
setLayout(bl);
this.setTitle("Test");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setExtendedState(this.MAXIMIZED_BOTH);
this.getContentPane().add(addNewRow(), BorderLayout.SOUTH);
this.pack();
this.setVisible(true);
}
public JComponent addNewRow() {
JPanel getSouthPanel = new JPanel();
getSouthPanel.setLayout(new BorderLayout());
JButton plus = new JButton("Add new Row");
plus.addActionListener(new MVCControllerAddLine(this));
getSouthPanel.add(plus, BorderLayout.SOUTH);
return getSouthPanel;
}
}
public class MVCControllerAddLine implements ActionListener{
private MVCView view;
MVCViewNodeContainer mvcViewNodeContainer = new MVCViewNodeContainer();
public MVCControllerAddLine(MVCView view) {
this.view = view;
}
@Override
public void actionPerformed(ActionEvent e) {
view.getContentPane().add(mvcViewNodeContainer.addNewNodeContainer());
view.revalidate();
view.validate();
view.repaint();
}
}
public class MVCViewNodeContainer{
private JPanel panel;
MVCView view;
public MVCViewNodeContainer() {
addNewNodeContainer();
}
public JComponent addNewNodeContainer() {
panel = new JPanel();
panel.setLayout(new GridBagLayout());
JButton addNode = new JButton("Add Node");
addNode.setPreferredSize(new Dimension(100, 120));
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(4, 4, 4, 4);
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.fill = GridBagConstraints.EAST;
gbc.anchor = GridBagConstraints.NORTHEAST;
gbc.weighty = 1;
gbc.weightx = 1;
panel.add(addNode, gbc);
panel.setMaximumSize(new Dimension(150, 100));
return panel;
}
}
让我知道您是否需要更多代码。我试图省掉不必要的东西。
非常感谢您的帮助。
许多问候和一个愉快的周末
A456B123
答案 0 :(得分:2)
我认为问题在于您尝试错误地使用BorderLayout。
边界布局可对容器进行布局,并对其组件进行调整并调整其大小以适合五个区域:北,南,东,西和中部。 每个区域最多只能包含一个组成部分,并由相应的常数标识:NORTH,SOUTH,EAST,WEST和CENTER。
您的代码在这里:
@Override
public void actionPerformed(ActionEvent e) {
view.getContentPane().add(mvcViewNodeContainer.addNewNodeContainer());
view.revalidate();
view.validate();
view.repaint();
}
每次都将“ NodeContainers”添加到BorderLayout的相同区域。您需要具有一个放置在一个区域中的具有不同布局的面板,并将按钮或“ NodeContainers”添加到该面板中。