0

私は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]ボタンと[キャンセル]ボタンの間に[質問を表示]ボタンが必要です。助けてください。どうもありがとう :)

4

1 に答える 1

0

あまり役に立たないと思いますが、投稿しています。これは、あなたがしていることが単純なケースで機能すること、そしてあなたの質問に答えるために、あなたが単純なケースから(そして正しいSwingの使用法から)どこから逸脱しているかを理解する必要があることを示しています。

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;


public class Dialoger
{
    public static void main(String[] args)
    {
        Dialoger dialoger = new Dialoger();
        dialoger.go();
    }

    public void go()
    {
        JDialog jd = new JDialog();
        JButton one = new JButton("one");
        JButton two = new JButton("two");
        JButton three = new JButton("three");
        JPanel panel = new JPanel();
        panel.add(one);
        panel.add(two);
        panel.add(three);
        jd.add(panel, BorderLayout.SOUTH);
        jd.pack();
        jd.setVisible(true);
    }

}
于 2013-03-25T17:42:12.060 に答える