当前位置: 首页 > 知识库问答 >
问题:

为什么Swing frame有时在下面没有打开?我附上了我的代码,有人帮我解释为什么会这样?

笪健
2023-03-14

在这里,我附上了我的代码:我现在正在开发我想要创建的音乐播放器,所以我在Swing FrameWork上编码此代码可以正常工作,然后添加两个名为上一个按钮和下一个播放按钮的按钮,添加这些按钮后,摆动框架没有打开,即使我尝试通过评论新添加的行(上一个按钮和下一个按钮),但这对我没有帮助

//Main Method
import javax.swing.JFrame;
import javax.swing.SwingUtilities;`

public class App{
public static void main(String args[]){
    SwingUtilities.invokeLater(new Runnable() { //To make Robust
        public void run(){  //Run Method
            new MainFrame();        }
    });
}
}
//Frame Method
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.FlowLayout;
public class MainFrame extends JFrame{
private JButton Play,Previous,Next;
private JTextArea textArea;
public MainFrame(){
    super("Hello World"); //Inherit that Jframe

    try{

    setLayout(new BorderLayout()); //Setting Layout
    setLayout(new FlowLayout());





    Play=new JButton("Play"); //Creating Object for Button

    Previous=new JButton("Previous");

    Next=new JButton("Next");



    textArea=new JTextArea();//Creating object for JTextArea

    Play.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent l) {
            textArea.append("Song plays\n");//Print Song Plays
        }
    });


Previous.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent l){
        textArea.append("Previous Song\n");
    }
});

Next.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent l){
        textArea.append("Next Song\n");
    }
});
//Adding TextArea and Buttons to Frame
    add(Play,FlowLayout.CENTER);//Adding to Frame
    add(textArea,FlowLayout.LEADING);//Adding to Frame
    add(Previous,FlowLayout.LEFT);
    add(Next,FlowLayout.RIGHT);

  


    setSize(800,800);//Size for Frame
    setResizable(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}
catch( Exception e){
e.printStackTrace();
}
}
}

共有1个答案

毛景曜
2023-03-14

Oracle提供了一个有用的教程,使用Swing创建GUI。跳过NetBeans IDE部分的学习摆动。特别注意容器部分内的组件布局。

我继续创建了以下GUI。

创建Swing GUI时,将Swing组件添加到JPanel或JScrollPane。将jpanel和/或JScrollPanes添加到JFrame中。这有助于保持代码的条理化。

Swing布局管理器使创建GUI变得简单。将Swing组件添加到一个或多个JPanel,将JPanel添加到JFrame,然后打包JFrame。

我使用的唯一“技巧”是将最大的按钮的首选大小复制到其他按钮。这使GUI看起来更好。

这是完整的可运行代码。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class MusicPlayer implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new MusicPlayer());
    }

    private JTextArea textArea;

    @Override
    public void run() {
        JFrame frame = new JFrame("Music Player");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createTextArea(), BorderLayout.CENTER);
        frame.add(createButtonPanel(), BorderLayout.SOUTH);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JScrollPane createTextArea() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        textArea = new JTextArea(10, 40);
        panel.add(textArea, BorderLayout.CENTER);

        JScrollPane scrollPane = new JScrollPane(panel);

        return scrollPane;
    }

    private JPanel createButtonPanel() {
        JPanel panel = new JPanel(new FlowLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        JButton previousButton = new JButton("Previous");
        previousButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                textArea.append("Previous Song\n");
            }
        });
        panel.add(previousButton);

        JButton playButton = new JButton("Play");
        playButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                textArea.append("Song plays\n");// Print Song Plays
            }
        });
        panel.add(playButton);

        JButton nextButton = new JButton("Next");
        nextButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                textArea.append("Next Song\n");
            }
        });
        panel.add(nextButton);

        // Make the buttons the same size
        Dimension d = previousButton.getPreferredSize();
        playButton.setPreferredSize(d);
        nextButton.setPreferredSize(d);

        return panel;
    }

}
 类似资料:
  • 日安, 我有一个问题,在我的代码中,一个声明在函数之外有一个错误。 谢谢

  • 您将自动执行著名的歌曲“墙上的99瓶XXX”。你将打印这首歌所有99个诗句的歌词。用循环!如果你不知道歌词,用谷歌查一下。 该方案应: a.如果他们不到21岁,或者他们喜欢苏打水,那么歌词是“墙上有99瓶苏打水” B.如果他们超过21岁,那么是“99瓶啤酒” 您必须使用WHILE循环,并且counter变量必须是print语句的一部分! 所以第一节是: 99瓶苏打水挂在墙上 墙上有98瓶苏打水 最

  • 今天我在家里的电脑上安装了netbean,以便在家做一些工作。我安装了java 8 JDK(151),并安装了包含所有内容的netbean(没有进行自定义安装)。然后我把我的项目从github上撤下来。 我的安装文件夹是在E:\netbean我的项目文件夹是默认的c: 我加载了项目,打开XAMPP并运行它。太好了,很管用。 然后我对HTML进行了更改(修复了我犯的一个拼写错误)。再次运行。找不到零

  • 问题内容: 我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如LIKE)称为实例方法。这是我感到困惑的地方,因为我期望从null对象调用静态方法(就像在调用实例方法中一样)。我真的很感谢一些解释,为什么我错了一个期望。 这是示例代码: 问题答案: 通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估表达式并丢弃结果后静态进

  • 我将角色粘贴到一个空对象,并将刚体脚本应用到该空对象(以更改轴)。 使用系统。收藏;系统收藏。通用的联合发动机; 公共类主要特征:单一行为{公共浮动速度; }