gpt4 book ai didi

Java:扩展 JFrame 含义和 1 个监听器用于多个操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:04 25 4
gpt4 key购买 nike

我有点困惑。我现在在工作(刚开始学徒),需要创建一个完全可编辑的表(我很快就会使用 SQL)。所以我在这里有 2 个问题:

  1. “不要扩展 JFrame”是什么意思?假设我有一个名为“TestDialog”的类和一个名为“TestUI”的 JFrame。这样写行不行

    公共(public)类 TestDialog 扩展 TestUI ?

    据我所知,不应该创建一个类(称为 MyExample)并在该类内部编写

    公共(public)类 MyExample 扩展 JFrame

    因为您是在现有类中创建 JFrame,而不是单独创建它。

  2. 我会保持简短 - 我可以在 1 个监听器中使用 2 个操作(对于 1 个按钮)吗?像这样的东西:

     public void actionPerformed(ActionEvent e) 
    {
    Action_One; Action_Two;
    }
    • 或者我需要使用 2 个不同的监听器吗?

好吧,我想就是这样。对不起,我没有把所有的东西都写清楚,我只是在这里注册,实际上专注于将我的语言翻译成英语。如果有人能告诉我如何像在 Eclipse 中一样在此处编写,我将不胜感激,因为我真的找不到方法。

最佳答案

继承之上的组合是一种重要的编程方法。所以我更喜欢下面的GUI构建。

public class Application {

private JFrame mainFrame;

private MainPanel mainPanel;

private void installFrame() {
// initialize main frame
mainFrame = new JFrame("Title");
}

private void installComponents() {
// install all components
mainPanel = new MainPanel();
}

private void layout() {
// provide layouting
mainFrame.add(mainPanel.getComponent());
}

private void show() {
mainFrame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Application app = new Application();
app.installFrame();
app.installComponents();
app.layout();
app.show();
}
});
}
}

主面板没有继承自 JPanel,而是使用它的一个实例。

public class MainPanel {
private JPanel mainPanel;

public MainPanel() {
mainPanel = new JPanel(new GridBagLayout()); // or another layout
initComponents();
layout();
}

private void initComponents() {
// init all components here
}

private void layout() {
// layout panel here
}

public Component getComponent() {
return mainPanel;
}
}

我对每个复杂组件使用相同的模式(例如树、表格、列表、选项卡式 Pane 等)。但这种方法有一个缺点:没有支持它的 GUI 构建器。

关于操作:您可以提供组合操作。像这样

public class CombinedAction extends AbstractAction {
private Action[] delegates;
public CombinedAction(String name, Icon icon, Action... someDelegates) {
super(name, icon);
delegates = someDelegates;
}

public void actionPerformed(ActionEvent ae) {
for (Action delegate : delegates) {
delegate.actionPerfromed(ae);
}
}
}

关于Java:扩展 JFrame 含义和 1 个监听器用于多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26482182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com