【问题标题】:JPanel running on a JApplet在 JApplet 上运行的 JPanel
【发布时间】:2012-06-16 14:46:03
【问题描述】:

我正在设计一个 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);
    }

}

【问题讨论】:

  • 其他人已经给出了我的答案:-),这解释得太好了。只需使用嵌套框,将组件放在您想要的位置:-) +1 给所有人,尽管昨天已经这样做了 :-)

标签: java swing japplet


【解决方案1】:

建议:

  • 至于将一个组件放在另一个组件之上,请使用一个布局管理器来促进这一点,例如垂直 BoxLayout。
  • 为了让您的显示器响应数字数据的变化,我建议您通过使用Model-View-Controller 类型的应用程序设计,以一种易于实现的方式设计您的程序。按下“绘图”或“优化”按钮将触发控制器,该控制器将更新模型的数据。视图或 GUI 会监听模型变化,并在发生变化时根据模型的最新数据重新绘制图表。

【讨论】:

    【解决方案2】:
    1. 要让 x 轴和 y 轴控件相互叠加,您应该有两个面板,一个包含 x 轴的标签和文本字段,另一个包含 y 轴的标签和文本字段.然后,您可以将它们添加到垂直对齐的面板中。 (例如Box.createVerticalBox()

    2. 您可以将graph.java 设为“绘图”和“优化”按钮的ActionListener。在graph.java 的actionPerformed 方法中,您可以启动重绘,从“ControlsB”实例中收集范围。

    编辑:回复您的 cmets...

    '如何添加另一个面板以便我将 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 实例中收集范围...'

    您应该查看this tutorial 中的ActionListeners,以了解如何使按钮单击事件在单独的类中触发动作。

    另外,两个批评:

    1. 在您的主类GraphApplet 中,您将创建一个Box,然后将其传递给ControlsAControlsB 的构造函数。然后,在构造函数中,您重新分配您传入的 Box。我认为您不需要这样做。在GraphApplet 中创建正确对齐的框,将其传入并且不要重新分配,或者根本不传入任何内容。

    2. 您的 ControlsAControlsB 类都扩展了 JPanel。尽管在构造函数的末尾将Box 容器添加到每个容器中很麻烦,但您永远不会将这些 Controls+ 对象添加到任何父容器中。在您当前的实现中,我建议不需要扩展 JPanel

    【讨论】:

    • 感谢您的回复。我是 java 新手,因此如果可能的话,我想请您了解有关上述答案的更多详细信息。谢谢:)
    • @Matthew:您应该具体地询问不清楚的地方。
    • 如何添加另一个面板以便我将 x 轴放在 y 轴上方以及如何从 ControlsB 实例中收集范围...
    • 亲爱的,关于您提供的代码,以便 x 轴显示在 y 轴上方,非常棒。非常感谢。现在关于动作监听器的问题,为了让我接受用户输入的值,任何人都可以给我一个关于如何编码的提示吗?再次感谢
    • Matthew,我建议您考虑完成这个问题并创建一个针对 ActionListener 问题的新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多