import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class SideNotes {
public static JPanel panel = new JPanel();
private List<String> notes = new ArrayList<String>();
private static JButton add = new JButton("Add note");
public SideNotes() {
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(add);
loadNotes();
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addNote();
}
});
}
public void addNote() {
String note = JOptionPane.showInputDialog("Enter note: ", null);
notes.add(note);
JLabel label = new JLabel(note);
panel.add(label);
panel.revalidate();
panel.repaint();
}
private void loadNotes() {
for (int i = 0; i < notes.size(); i++) {
JCheckBox jcb = new JCheckBox(notes.get(i), false);
panel.add(jcb);
panel.revalidate();
panel.repaint();
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(200, 400);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(add);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
new SideNotes();
}
}
为什么我的JCheckBox
不出现?文本显示但不是实际的框。这是什么交易?
我已经编辑了我的帖子以包含我的所有代码,以防有助于解决问题。
needmoretextneedmoretextneedmoretextneedmoretextneedmoretextneedmoretextneedmoretext
答案 0 :(得分:3)
可能的原因:
null
布局。pack()
吗?你在任何地方使用空布局或绝对定位吗?你需要把面板放在JScrollPane吗?考虑创建并发布sscce以获得更好的帮助。
修改
getPanel()
。frame.add(sideNotes.getPanel());
。答案 1 :(得分:1)
每次按下按钮,面板上都会添加一个新的音符(JLabel
)。但是在添加新笔记之后,你永远不会打电话给loadNotes()
。因此,JLabel
已添加,但未按预期添加JCheckBox
。
除此之外,我建议你做出这样的改变:
public void addNote() {
String note = JOptionPane.showInputDialog("Enter note: ", null);
if(notes != null) {
notes.add(note);
JLabel label = new JLabel(note);
panel.add(label);
panel.add(new JCheckBox(note, false));
panel.revalidate();
panel.repaint();
}
}
因此,您无需调用loadNotes()
并只需更新一次GUI。