我想創建一個基本的GUI程序,其目的是:如何添加JPanel動態並使其可點擊?
- 動態插入的JPanel(將創建JPanel的數量是在我的列表的大小基地)是滾動的。
- 無論何時單擊,從JPanel獲取信息。
到目前爲止,這是我做過什麼:
...
public class BeesFrame extends javax.swing.JFrame {
List<String> bees = new ArrayList<>(Arrays.asList("Bee 1", "Bee 2", "Bee 3",
"Bee 4", "Bee 5", "Bee 6",
"Bee 7", "Bee 8", "Bee 9",
"Bee 10", "Bee 11", "Bee 12",
"Bee 13"));
GridBagLayout layout = new GridBagLayout();
JScrollPane scrollpane;
JPanel beesPanel;
JPanel beesCell;
JLabel label;
public BeesFrame() {
initComponents();
label = new JLabel();
for(int i = 0; i < bees.size(); i++){
beesCell = new JPanel();
beesCell.setName(bees.get(i));
beesCell.setPreferredSize(new Dimension(100, 100));
beesCell.setMinimumSize(new Dimension(100, 100));
beesCell.setBackground(Color.yellow);
label.setHorizontalTextPosition(SwingConstants.CENTER);
label.setText(beesCell.getName());
beesCell.add(label);
beesCell.validate();
beesCell.repaint();
System.out.println(bees.get(i));
}
beesMainPanel.setLayout(new GridLayout((bees.size()/4)+1, 4, 1, 1));
beesMainPanel.add(beesCell);
beesCell.setVisible(true);
beesCell.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e){
JPanel panel = (JPanel) getComponentAt(e.getPoint());
panel.setName(label.getText());
outPut(panel);
}
});
beesCell.validate();
beesCell.repaint();
}
void outPut(JPanel panel){
System.out.println("Panel...."+panel.getName());
}
... // some other code generated by Netbeans
}
但不是正確顯示它的。只有我列表中的最後一個被插入,如果我點擊它,它說javax.swing.JRootPane不能轉換爲javax.swing.JPanel。這是發生錯誤:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JRootPane cannot be cast to javax.swing.JPanel
at catchingbees.frame.BeesFrame$1.mousePressed(BeesFrame.java:79)
at java.awt.Component.processMouseEvent(Component.java:6530)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
...
這裏是我的輸出的屏幕截圖:
但是這就是我打算做:
很感謝任何形式的幫助。
1)爲了更好地幫助更快,發佈[MCVE]或[短的,獨立的,正確的示例](HTTP: //www.sscce.org/)。 2)請參閱[什麼是堆棧跟蹤,以及如何使用它來調試我的應用程序錯誤?](http://stackoverflow.com/q/3988788/418556)&[什麼是空指針異常,以及如何我解決它?](http://stackoverflow.com/q/218384/418556) –