Где разместить код JOptionPane ShowInputDialog?

Я думаю, что название оси вполне понятно. ancestor ось выбирает только предка (ов) текущего контекстного элемента, а ancestor-or-self выбирает как предка (ы) , так и сам текущий элемент . Рассмотрим следующий XML, например:


    
        
            
        
    

Следующий xpath, который использует ось ancestor, найдет элемент b, поскольку он имеет атрибут target, равный true, а b равен предка элемента context. Но XPath не будет выбирать элемент context, несмотря на то, что он target равен true:

//context/ancestor::*[@target='true']

вывод вышеупомянутого XPath в xpath tester :

Element='
  
'

контрастирует с осью ancestor-or-self, которая вернет тот же элемент плюс context:

//context/ancestor-or-self::*[@target='true']

вывод второго XPath:

Element='
  
'
Element=''

0
задан Andrew Thompson 16 January 2019 в 07:31
поделиться

1 ответ

1117 Вопрос и намерение не совсем ясны. Какова цель диалога?

Я предполагаю, что вы хотите собрать некоторую информацию, которая затем может быть передана в FractalTree для изменения его рендеринга. , Какова цель диалога?

Я предполагаю, что вы хотите собрать некоторую информацию, которая затем может быть передана в FractalTree для изменения его рендеринга, в этом случае вам, вероятно, нужно поместить диалог перед созданием из FractalTree

public static void gui()
{
    // You can put the dialog here...
    JFrame f=new JFrame("fractal tree");
    //...

Если вы хотите изменить свойства FractalTree после его отображения, то вам, вероятно, нужно использовать JButton и ActionListener и поместить там диалог. ... или предоставить второй вид для непосредственного сбора свойств

Фактически, цель диалогового окна - задать уровень рекурсии. Если я размещу его так, как вы предлагаете, все в порядке, но диалоговое окно появляется само по себе, а не на черной панели, и мне бы хотелось, чтобы оно появилось на панели ...

Давайте просто проясним, что ТАК не сайт для обучения или наставничества. Ваша проблема не техническая, а опытная. Вы должны тратить больше времени на чтение учебных пособий, таких как Создание графического интерфейса с помощью Swing и пробование вещей. Так вы станете лучшим разработчиком и научитесь решать свои собственные проблемы.

Судя по вашим отзывам, JOptionPane не то, что вам нужно.

Вместо этого вам нужно использовать немного другой подход и предоставить свой собственный компонент ввода.

Во-первых, вам нужно изменить FractalTree, чтобы вы могли легче изменять свойство depth (и установить начальную глубину на 0, чтобы он прекратил рисовать)

public class FractalTree extends JPanel implements ActionListener {
    private int depth = 0; // set to 0 to stop it from rendering

    public void setDepth(int depth) {
        this.depth = depth;
        repaint();
    }

    public int getDepth() {
        return depth;
    }

Далее , вам нужно создать свой собственный компонент ввода, который может принимать ввод от пользователя и обновлять дерево

public class InputPane extends JPanel {
    private FractalTree fractalTree;

    private JTextField depthField;

    public InputPane(FractalTree fractalTree) {
        this.fractalTree = fractalTree;
        depthField = new JTextField(10);
        depthField.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                String text = depthField.getText().trim();
                try {
                    int value = Integer.parseInt(text);
                    fractalTree.setDepth(value);
                } catch (NumberFormatException exp) {
                    JOptionPane.showMessageDialog(InputPane.this, text + " is not a valid numerical value");
                }
            }
        });
    }

}

Затем вы хотите создать новую точку входа, которая может объединить два ...

import java.awt.EventQueue;
import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                FractalTree tree = new FractalTree();
                InputPane input = new InputPane(tree);
                JFrame frame = new JFrame();
                frame.add(tree);
                frame.add(input, BorderLayout.SOUTH);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }
}

Да, это приведет к небольшому окну, потому что FractalTree не определяет никаких подсказок по размеру, которые можно решить, переопределив его метод getPreferredSize и вернув более подходящий размер.

Это создаст вам «лучший путь», есть еще проблемы, которые вам придется решать, потому что выполнение всего этого для вас не поможет вам

0
ответ дан MadProgrammer 16 January 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: