Вопрос и намерение не совсем ясны. Какова цель диалога?
Я предполагаю, что вы хотите собрать некоторую информацию, которая затем может быть передана в 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
и вернув более подходящий размер.
Это создаст вам «лучший путь», есть еще проблемы, которые вам придется решать, потому что выполнение всего этого для вас не поможет вам