Я думаю, что название оси вполне понятно. 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=' '
Я предполагаю, что вы хотите собрать некоторую информацию, которая затем может быть передана в FractalTree
для изменения его рендеринга. , Какова цель диалога?
Я предполагаю, что вы хотите собрать некоторую информацию, которая затем может быть передана в FractalTree
для изменения его рендеринга, в этом случае вам, вероятно, нужно поместить диалог перед созданием из FractalTree
public static void gui()
{
// You can put the dialog here...
JFrame f=new JFrame("fractal tree");
//...
Если вы хотите изменить свойства FractalTree
после его отображения, то вам, вероятно, нужно использовать JButton
и ActionListener
и поместить там диалог. ... или предоставить второй вид для непосредственного сбора свойств
Фактически, цель диалогового окна - задать уровень рекурсии. Если я размещу его так, как вы предлагаете, все в порядке, но диалоговое окно появляется само по себе, а не на черной панели, и мне бы хотелось, чтобы оно появилось на панели ...
blockquote>Давайте просто проясним, что ТАК не сайт для обучения или наставничества. Ваша проблема не техническая, а опытная. Вы должны тратить больше времени на чтение учебных пособий, таких как Создание графического интерфейса с помощью 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
и вернув более подходящий размер.Это создаст вам «лучший путь», есть еще проблемы, которые вам придется решать, потому что выполнение всего этого для вас не поможет вам