JPanel, работающий на JApplet

Я разрабатываю JApplet, и в основном этот апплет позволит пользователю нарисовать график квадратного уравнения и вставить диапазоны как по оси x, так и по оси y. Но еще многое предстоит сделать, чтобы достичь этой точки.

Я все еще на стадии проектирования интерфейса.

Вот мой код:

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class Applet extends JApplet {
    JPanel p1;
    JPanel p2;
    JPanel p3;

    JScrollPane s1;

    public Applet() {

    p1 = new JPanel();
    p2 = new JPanel();
    p3 = new JPanel();

    s1 = new JScrollPane(p3,s1.VERTICAL_SCROLLBAR_ALWAYS,s1.HORIZONTAL_SCROLLBAR_ALWAYS);
    }

    @Override
    public void init() {
    super.init();

    for(int i=0;i<100;i++)
    {
        p3.add(new JButton("Hello"));
        p3.add(new JLabel("blah"));
        p3.add(new JButton("Sup"));
    }

    p1.setPreferredSize(new Dimension(this.getWidth(), this.getHeight()));
    p2.setPreferredSize(new Dimension(this.getWidth(),(int) (this.getHeight()*0.6667)));

    p3.setLayout(new BoxLayout(p3,BoxLayout.PAGE_AXIS));
    s1.setPreferredSize(new Dimension(this.getWidth(),(int)(this.getHeight()*0.33333)));

    p1.add(p2);
    p1.add(s1);

    this.add(p1);
    }

}

person MBC870    schedule 16.06.2012    source источник
comment
Мой ответ уже дан другими :-), это слишком хорошо объяснено. Просто используйте вложенную коробку, чтобы ставить компоненты куда хотите :-) +1 всем, хотя это уже было вчера :-)   -  person nIcE cOw    schedule 17.06.2012


Ответы (2)


Рекомендации:

  • Что касается размещения одного компонента поверх другого, используйте менеджер компоновки, который облегчит это, например вертикальный BoxLayout.
  • Чтобы дисплей реагировал на изменение числовых данных, я рекомендую разработать программу таким образом, чтобы это было легко реализовать, используя Модель-Представление-Контроллер. Нажатие кнопки «график» или «уточнить» запускает контроллер, который обновляет данные модели. Представление или графический интерфейс будут прослушивать изменения модели и, когда они произойдут, перестроят график на основе последних данных модели.
person Hovercraft Full Of Eels    schedule 16.06.2012

  1. чтобы элементы управления осью X и осью Y располагались друг над другом, у вас должно быть две панели, одна из которых включает метки и текстовые поля для оси X в одной и для оси Y в другой. Затем вы должны добавить их на панель, выровненную по вертикали. (Box.createVerticalBox(), например)

  2. Вы можете сделать graph.java ActionListener кнопок «Сюжет» и «Уточнить». В методе actionPerformed в graph.java вы можете инициировать перерисовку, собирая диапазоны из экземпляра ControlsB.

РЕДАКТИРОВАТЬ: отвечая на ваши комментарии...

'как добавить еще одну панель, чтобы разместить ось x над осью y'

это может быть так же просто, как (в ControlsB.java):

b = Box.createHorizontalBox();
b.add(new JLabel("Please enter range:  "));

Box b0 = Box.createVerticalBox();//create a vertical box to stack the controls

Box b1 = Box.createHorizontalBox(); // create a horizontal box for the x-axis

b1.add(new JLabel(" x-axis "));
b1.add(new JLabel("from"));
JTextField f1 = new JTextField("-5");
f1.setMaximumSize(new Dimension(100,30));
b1.add(f1);
b1.add(new JLabel(" to "));
JTextField f2 = new JTextField("5");
f2.setMaximumSize(new Dimension(100,30));
b1.add(f2);
b1.add(new JLabel(".   "));

Box b2 = Box.createHorizontalBox(); // create a second horizontal box for the y-axis
b2.add(new JLabel("y-axis "));
b2.add(new JLabel("from"));
JTextField f3 = new JTextField("5");
f3.setMaximumSize(new Dimension(100,30));
b2.add(f3);
b2.add(new JLabel("to"));
JTextField f4 = new JTextField("-5");
f4.setMaximumSize(new Dimension(100,30));
b2.add(f4);

b0.add(b1); // add the x-axis to the vertical box
b0.add(b2); // add the y-axis to the vertical box
b.add(b0);  // add the vertical box to the parent

b.add(new JButton("Plot"));
b.add(new JButton("Refine"));
add(b); //is this necessary?
}

' и как получить диапазоны из экземпляра ControlsB...'

Чтобы понять, как сделайте так, чтобы события нажатия кнопки вызывали действие в отдельном классе.

Кроме того, два критических анализа:

  1. в вашем основном классе GraphApplet вы создаете Box перед передачей его в каждый из конструкторов ControlsA и ControlsB. Затем в конструкторе вы переназначаете Box, который вы передали. Я не думаю, что вам нужно это делать. Либо создайте правильно выровненный блок в GraphApplet, передайте его и не переназначайте, либо вообще ничего не передавайте.

  2. Ваши классы ControlsA и ControlsB расширяют JPanel. Хотя вы стараетесь добавлять свои контейнеры Box к каждому из них в конце их конструкторов, вы никогда не добавляете эти объекты Controls+ ни в один из родительских контейнеров. В вашей текущей реализации я бы предположил, что расширение JPanel не требуется.

person akf    schedule 16.06.2012
comment
Спасибо за ваш ответ. Я новичок в java, поэтому, если возможно, я хотел бы попросить вас предоставить более подробную информацию о приведенном выше ответе. Спасибо :) - person MBC870; 16.06.2012
comment
@Matthew: вы должны спросить конкретно о том, что неясно. - person Hovercraft Full Of Eels; 16.06.2012
comment
как добавить еще одну панель, чтобы разместить ось x над осью y и как собрать диапазоны из экземпляра ControlsB... - person MBC870; 16.06.2012
comment
Дорогие все, что касается кода, который вы предоставили, так что ось x отображается над осью y, это блестяще. Большое спасибо. Теперь, что касается моей проблемы с прослушивателем действий, чтобы я мог принимать значения, которые вводит пользователь, может ли кто-нибудь дать мне совет о том, как его закодировать? еще раз спасибо - person MBC870; 17.06.2012
comment
Мэтью, я бы предложил рассмотреть этот вопрос как завершенный и создать новый вопрос, нацеленный на проблему ActionListener. - person akf; 18.06.2012