私はCSプロジェクトでしばらくSwingを使用していますが、これは冗長に聞こえるかもしれませんが、JPanelのJButtonをポップできません。同じコードに従う他の2つのボタンがあり、それらは表示されますが、私が作成したこのボタンは表示を拒否します。ボタンは「質問を表示」ボタンです。OKやCANCELなどの同様のボタンは正常に機能します。どんな助けでも大歓迎です。コード:
public class CatNodePicker {
private final JDialog dialog;
private String selectedNodeCode;
private XMLTreeNode selectedNode;
private JTree cat;
public CatNodePicker(Container container, JTree cat) {
this.cat = cat;
selectedNodeCode = null;
selectedNode = null;
dialog =new JDialog(findParentFrame(container), "Pick a LEAF node", true);
JPanel buttonPanel = new JPanel();
final JButton okButton = new JButton("OK");
okButton.setEnabled(false);
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dialog.dispose();
}
});
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
selectedNodeCode = null;
selectedNode = null;
dialog.dispose();
}
});
JButton viewQuestion = new JButton("View Question");
viewQuestion.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
getQuestionLabel();
}
});
buttonPanel.add(okButton);
buttonPanel.add(viewQuestion);
buttonPanel.add(cancelButton);
cat.expandRow(1);
JScrollPane jsp = new JScrollPane(cat);
cat.addTreeSelectionListener(new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent e) {
TreePath path=e.getNewLeadSelectionPath();
if(path==null) {
selectedNodeCode = null;
selectedNode = null;
}
if (path.getLastPathComponent().equals(path.getPathComponent(1))) {
selectedNodeCode = null;
selectedNode = null;
}
else {
XMLTreeNode n=((XMLTreeNode)path.getLastPathComponent());
//System.out.println(n.toString());
if(n.isLeaf() || n.isFilter() || n.isLayer()) {
selectedNodeCode = n.getCode();
selectedNode = n;
okButton.setEnabled(true);
}
else
okButton.setEnabled(false);
}
}
});
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
selectedNodeCode = null;
selectedNode = null;
dialog.dispose();
}
});
dialog.getContentPane().add(jsp, BorderLayout.CENTER);
dialog.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
dialog.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
dialog.setSize(new Dimension(600,800));
dialog.setLocationRelativeTo(null);
dialog.pack();
}
public JComponent getQuestionLabel(){
JLabel questionText= new JLabel("Question here");
return questionText;
}
}
つまり、[OK]ボタンと[キャンセル]ボタンの間に[質問を表示]ボタンが必要です。助けてください。どうもありがとう :)